From 27483bccd6b69863685c5b0915b6973b36147eaa Mon Sep 17 00:00:00 2001 From: otsmr Date: Fri, 26 Dec 2025 12:12:56 +0100 Subject: [PATCH] workaround for #349 --- lib/src/services/api.service.dart | 2 +- .../camera_preview_controller_view.dart | 1 + .../views/camera/image_editor/data/layer.dart | 10 +++++++ .../image_editor/layers/emoji_layer.dart | 5 ++++ .../camera/image_editor/layers_viewer.dart | 7 +++-- .../image_editor/modules/all_emojis.dart | 1 + .../views/camera/share_image_editor_view.dart | 29 +++++++++++++------ 7 files changed, 43 insertions(+), 12 deletions(-) diff --git a/lib/src/services/api.service.dart b/lib/src/services/api.service.dart index 36ad7bc..223ea00 100644 --- a/lib/src/services/api.service.dart +++ b/lib/src/services/api.service.dart @@ -50,7 +50,7 @@ final lockRetransStore = Mutex(); /// errors or network changes. class ApiService { ApiService(); - final String apiHost = kReleaseMode ? 'api.twonly.eu' : '10.99.0.140:3030'; + final String apiHost = kReleaseMode ? 'api.twonly.eu' : '192.168.178.88:3030'; // final String apiHost = kReleaseMode ? 'api.twonly.eu' : 'dev.twonly.eu'; final String apiSecure = kReleaseMode ? 's' : ''; diff --git a/lib/src/views/camera/camera_preview_components/camera_preview_controller_view.dart b/lib/src/views/camera/camera_preview_components/camera_preview_controller_view.dart index a9e7465..25f299b 100644 --- a/lib/src/views/camera/camera_preview_components/camera_preview_controller_view.dart +++ b/lib/src/views/camera/camera_preview_components/camera_preview_controller_view.dart @@ -397,6 +397,7 @@ class _CameraPreviewViewState extends State { sharedFromGallery: sharedFromGallery, sendToGroup: widget.sendToGroup, mediaFileService: mediaFileService, + mainCameraController: mc, ), transitionsBuilder: (context, animation, secondaryAnimation, child) { return child; diff --git a/lib/src/views/camera/image_editor/data/layer.dart b/lib/src/views/camera/image_editor/data/layer.dart index 7f6bdf8..fb1fdd9 100755 --- a/lib/src/views/camera/image_editor/data/layer.dart +++ b/lib/src/views/camera/image_editor/data/layer.dart @@ -7,6 +7,7 @@ import 'package:twonly/src/views/camera/image_editor/data/image_item.dart'; /// Layer class with some common properties class Layer { Layer({ + required this.key, this.offset = Offset.zero, this.opacity = 1, this.isEditing = false, @@ -16,6 +17,7 @@ class Layer { this.rotation = 0, this.scale = 1, }); + Key key; Offset offset; double rotation; double scale; @@ -29,18 +31,24 @@ class Layer { /// Attributes used by [BackgroundLayer] class BackgroundLayerData extends Layer { BackgroundLayerData({ + required super.key, required this.image, }); ImageItem image; } class FilterLayerData extends Layer { + FilterLayerData({ + required super.key, + this.page = 1, + }); int page = 1; } /// Attributes used by [EmojiLayer] class EmojiLayerData extends Layer { EmojiLayerData({ + required super.key, this.text = '', this.size = 64, super.offset, @@ -56,6 +64,7 @@ class EmojiLayerData extends Layer { /// Attributes used by [TextLayer] class TextLayerData extends Layer { TextLayerData({ + required super.key, required this.textLayersBefore, this.text = '', super.offset, @@ -72,6 +81,7 @@ class TextLayerData extends Layer { class DrawLayerData extends Layer { // String text; DrawLayerData({ + required super.key, super.offset, super.opacity, super.rotation, diff --git a/lib/src/views/camera/image_editor/layers/emoji_layer.dart b/lib/src/views/camera/image_editor/layers/emoji_layer.dart index 0e5b7d7..32ddcc3 100755 --- a/lib/src/views/camera/image_editor/layers/emoji_layer.dart +++ b/lib/src/views/camera/image_editor/layers/emoji_layer.dart @@ -119,6 +119,11 @@ class _EmojiLayerState extends State { setState(() { twoPointerWhereDown = details.pointerCount >= 2; widget.layerData.size = initialScale * details.scale; + if (widget.layerData.size > 96) { + // https://github.com/twonlyapp/twonly-app/issues/349 + widget.layerData.size = 96; + } + // print(widget.layerData.size); widget.layerData.rotation = initialRotation + details.rotation; diff --git a/lib/src/views/camera/image_editor/layers_viewer.dart b/lib/src/views/camera/image_editor/layers_viewer.dart index 0fcf148..11312d1 100644 --- a/lib/src/views/camera/image_editor/layers_viewer.dart +++ b/lib/src/views/camera/image_editor/layers_viewer.dart @@ -23,12 +23,14 @@ class LayersViewer extends StatelessWidget { children: [ ...layers.whereType().map((layerItem) { return BackgroundLayer( + key: layerItem.key, layerData: layerItem, onUpdate: onUpdate, ); }), ...layers.whereType().map((layerItem) { return FilterLayer( + key: layerItem.key, layerData: layerItem, ); }), @@ -40,12 +42,13 @@ class LayersViewer extends StatelessWidget { .map((layerItem) { if (layerItem is EmojiLayerData) { return EmojiLayer( - key: GlobalKey(), + key: layerItem.key, layerData: layerItem, onUpdate: onUpdate, ); } else if (layerItem is DrawLayerData) { return DrawLayer( + key: layerItem.key, layerData: layerItem, onUpdate: onUpdate, ); @@ -54,7 +57,7 @@ class LayersViewer extends StatelessWidget { }), ...layers.whereType().map((layerItem) { return TextLayer( - // key: GlobalKey(), + key: layerItem.key, layerData: layerItem, onUpdate: onUpdate, ); diff --git a/lib/src/views/camera/image_editor/modules/all_emojis.dart b/lib/src/views/camera/image_editor/modules/all_emojis.dart index c808bd0..a19d30d 100755 --- a/lib/src/views/camera/image_editor/modules/all_emojis.dart +++ b/lib/src/views/camera/image_editor/modules/all_emojis.dart @@ -44,6 +44,7 @@ class EmojiPickerBottom extends StatelessWidget { Navigator.pop( context, EmojiLayerData( + key: GlobalKey(), text: emoji.emoji, ), ); diff --git a/lib/src/views/camera/share_image_editor_view.dart b/lib/src/views/camera/share_image_editor_view.dart index 1e69bea..8d19205 100644 --- a/lib/src/views/camera/share_image_editor_view.dart +++ b/lib/src/views/camera/share_image_editor_view.dart @@ -16,6 +16,7 @@ import 'package:twonly/src/services/mediafiles/mediafile.service.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/storage.dart'; +import 'package:twonly/src/views/camera/camera_preview_components/main_camera_controller.dart'; import 'package:twonly/src/views/camera/camera_preview_components/save_to_gallery.dart'; import 'package:twonly/src/views/camera/image_editor/action_button.dart'; import 'package:twonly/src/views/camera/image_editor/data/image_item.dart'; @@ -32,17 +33,18 @@ List undoLayers = []; List removedLayers = []; class ShareImageEditorView extends StatefulWidget { - const ShareImageEditorView({ - required this.sharedFromGallery, - required this.mediaFileService, - super.key, - this.imageBytesFuture, - this.sendToGroup, - }); + const ShareImageEditorView( + {required this.sharedFromGallery, + required this.mediaFileService, + super.key, + this.imageBytesFuture, + this.sendToGroup, + this.mainCameraController}); final Future? imageBytesFuture; final Group? sendToGroup; final bool sharedFromGallery; final MediaFileService mediaFileService; + final MainCameraController? mainCameraController; @override State createState() => _ShareImageEditorView(); } @@ -69,7 +71,7 @@ class _ShareImageEditorView extends State { super.initState(); if (media.type != MediaType.gif) { - layers.add(FilterLayerData()); + layers.add(FilterLayerData(key: GlobalKey())); } if (widget.sendToGroup != null) { @@ -147,6 +149,7 @@ class _ShareImageEditorView extends State { removedLayers.clear(); layers.add( TextLayerData( + key: GlobalKey(), textLayersBefore: layers.whereType().length, ), ); @@ -161,7 +164,7 @@ class _ShareImageEditorView extends State { onPressed: () async { undoLayers.clear(); removedLayers.clear(); - layers.add(DrawLayerData()); + layers.add(DrawLayerData(key: GlobalKey())); setState(() {}); }, ), @@ -458,9 +461,16 @@ class _ShareImageEditorView extends State { if (!context.mounted) return; + Future.delayed(const Duration(milliseconds: 500), () async { + if (context.mounted) { + await widget.mainCameraController?.closeCamera(); + } + }); + layers.insert( 0, BackgroundLayerData( + key: GlobalKey(), image: currentImage, ), ); @@ -526,6 +536,7 @@ class _ShareImageEditorView extends State { removedLayers.clear(); layers.add( TextLayerData( + key: GlobalKey(), offset: Offset(0, tabDownPosition), textLayersBefore: layers.whereType().length, ),