mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 09:28:41 +00:00
workaround for #349
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
This commit is contained in:
parent
abd689f1fa
commit
27483bccd6
7 changed files with 43 additions and 12 deletions
|
|
@ -50,7 +50,7 @@ final lockRetransStore = Mutex();
|
||||||
/// errors or network changes.
|
/// errors or network changes.
|
||||||
class ApiService {
|
class ApiService {
|
||||||
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 apiHost = kReleaseMode ? 'api.twonly.eu' : 'dev.twonly.eu';
|
||||||
final String apiSecure = kReleaseMode ? 's' : '';
|
final String apiSecure = kReleaseMode ? 's' : '';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -397,6 +397,7 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
|
||||||
sharedFromGallery: sharedFromGallery,
|
sharedFromGallery: sharedFromGallery,
|
||||||
sendToGroup: widget.sendToGroup,
|
sendToGroup: widget.sendToGroup,
|
||||||
mediaFileService: mediaFileService,
|
mediaFileService: mediaFileService,
|
||||||
|
mainCameraController: mc,
|
||||||
),
|
),
|
||||||
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
||||||
return child;
|
return child;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import 'package:twonly/src/views/camera/image_editor/data/image_item.dart';
|
||||||
/// Layer class with some common properties
|
/// Layer class with some common properties
|
||||||
class Layer {
|
class Layer {
|
||||||
Layer({
|
Layer({
|
||||||
|
required this.key,
|
||||||
this.offset = Offset.zero,
|
this.offset = Offset.zero,
|
||||||
this.opacity = 1,
|
this.opacity = 1,
|
||||||
this.isEditing = false,
|
this.isEditing = false,
|
||||||
|
|
@ -16,6 +17,7 @@ class Layer {
|
||||||
this.rotation = 0,
|
this.rotation = 0,
|
||||||
this.scale = 1,
|
this.scale = 1,
|
||||||
});
|
});
|
||||||
|
Key key;
|
||||||
Offset offset;
|
Offset offset;
|
||||||
double rotation;
|
double rotation;
|
||||||
double scale;
|
double scale;
|
||||||
|
|
@ -29,18 +31,24 @@ class Layer {
|
||||||
/// Attributes used by [BackgroundLayer]
|
/// Attributes used by [BackgroundLayer]
|
||||||
class BackgroundLayerData extends Layer {
|
class BackgroundLayerData extends Layer {
|
||||||
BackgroundLayerData({
|
BackgroundLayerData({
|
||||||
|
required super.key,
|
||||||
required this.image,
|
required this.image,
|
||||||
});
|
});
|
||||||
ImageItem image;
|
ImageItem image;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FilterLayerData extends Layer {
|
class FilterLayerData extends Layer {
|
||||||
|
FilterLayerData({
|
||||||
|
required super.key,
|
||||||
|
this.page = 1,
|
||||||
|
});
|
||||||
int page = 1;
|
int page = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Attributes used by [EmojiLayer]
|
/// Attributes used by [EmojiLayer]
|
||||||
class EmojiLayerData extends Layer {
|
class EmojiLayerData extends Layer {
|
||||||
EmojiLayerData({
|
EmojiLayerData({
|
||||||
|
required super.key,
|
||||||
this.text = '',
|
this.text = '',
|
||||||
this.size = 64,
|
this.size = 64,
|
||||||
super.offset,
|
super.offset,
|
||||||
|
|
@ -56,6 +64,7 @@ class EmojiLayerData extends Layer {
|
||||||
/// Attributes used by [TextLayer]
|
/// Attributes used by [TextLayer]
|
||||||
class TextLayerData extends Layer {
|
class TextLayerData extends Layer {
|
||||||
TextLayerData({
|
TextLayerData({
|
||||||
|
required super.key,
|
||||||
required this.textLayersBefore,
|
required this.textLayersBefore,
|
||||||
this.text = '',
|
this.text = '',
|
||||||
super.offset,
|
super.offset,
|
||||||
|
|
@ -72,6 +81,7 @@ class TextLayerData extends Layer {
|
||||||
class DrawLayerData extends Layer {
|
class DrawLayerData extends Layer {
|
||||||
// String text;
|
// String text;
|
||||||
DrawLayerData({
|
DrawLayerData({
|
||||||
|
required super.key,
|
||||||
super.offset,
|
super.offset,
|
||||||
super.opacity,
|
super.opacity,
|
||||||
super.rotation,
|
super.rotation,
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,11 @@ class _EmojiLayerState extends State<EmojiLayer> {
|
||||||
setState(() {
|
setState(() {
|
||||||
twoPointerWhereDown = details.pointerCount >= 2;
|
twoPointerWhereDown = details.pointerCount >= 2;
|
||||||
widget.layerData.size = initialScale * details.scale;
|
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 =
|
widget.layerData.rotation =
|
||||||
initialRotation + details.rotation;
|
initialRotation + details.rotation;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,14 @@ class LayersViewer extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
...layers.whereType<BackgroundLayerData>().map((layerItem) {
|
...layers.whereType<BackgroundLayerData>().map((layerItem) {
|
||||||
return BackgroundLayer(
|
return BackgroundLayer(
|
||||||
|
key: layerItem.key,
|
||||||
layerData: layerItem,
|
layerData: layerItem,
|
||||||
onUpdate: onUpdate,
|
onUpdate: onUpdate,
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
...layers.whereType<FilterLayerData>().map((layerItem) {
|
...layers.whereType<FilterLayerData>().map((layerItem) {
|
||||||
return FilterLayer(
|
return FilterLayer(
|
||||||
|
key: layerItem.key,
|
||||||
layerData: layerItem,
|
layerData: layerItem,
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|
@ -40,12 +42,13 @@ class LayersViewer extends StatelessWidget {
|
||||||
.map((layerItem) {
|
.map((layerItem) {
|
||||||
if (layerItem is EmojiLayerData) {
|
if (layerItem is EmojiLayerData) {
|
||||||
return EmojiLayer(
|
return EmojiLayer(
|
||||||
key: GlobalKey(),
|
key: layerItem.key,
|
||||||
layerData: layerItem,
|
layerData: layerItem,
|
||||||
onUpdate: onUpdate,
|
onUpdate: onUpdate,
|
||||||
);
|
);
|
||||||
} else if (layerItem is DrawLayerData) {
|
} else if (layerItem is DrawLayerData) {
|
||||||
return DrawLayer(
|
return DrawLayer(
|
||||||
|
key: layerItem.key,
|
||||||
layerData: layerItem,
|
layerData: layerItem,
|
||||||
onUpdate: onUpdate,
|
onUpdate: onUpdate,
|
||||||
);
|
);
|
||||||
|
|
@ -54,7 +57,7 @@ class LayersViewer extends StatelessWidget {
|
||||||
}),
|
}),
|
||||||
...layers.whereType<TextLayerData>().map((layerItem) {
|
...layers.whereType<TextLayerData>().map((layerItem) {
|
||||||
return TextLayer(
|
return TextLayer(
|
||||||
// key: GlobalKey(),
|
key: layerItem.key,
|
||||||
layerData: layerItem,
|
layerData: layerItem,
|
||||||
onUpdate: onUpdate,
|
onUpdate: onUpdate,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ class EmojiPickerBottom extends StatelessWidget {
|
||||||
Navigator.pop(
|
Navigator.pop(
|
||||||
context,
|
context,
|
||||||
EmojiLayerData(
|
EmojiLayerData(
|
||||||
|
key: GlobalKey(),
|
||||||
text: emoji.emoji,
|
text: emoji.emoji,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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/log.dart';
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
import 'package:twonly/src/utils/storage.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/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/action_button.dart';
|
||||||
import 'package:twonly/src/views/camera/image_editor/data/image_item.dart';
|
import 'package:twonly/src/views/camera/image_editor/data/image_item.dart';
|
||||||
|
|
@ -32,17 +33,18 @@ List<Layer> undoLayers = [];
|
||||||
List<Layer> removedLayers = [];
|
List<Layer> removedLayers = [];
|
||||||
|
|
||||||
class ShareImageEditorView extends StatefulWidget {
|
class ShareImageEditorView extends StatefulWidget {
|
||||||
const ShareImageEditorView({
|
const ShareImageEditorView(
|
||||||
required this.sharedFromGallery,
|
{required this.sharedFromGallery,
|
||||||
required this.mediaFileService,
|
required this.mediaFileService,
|
||||||
super.key,
|
super.key,
|
||||||
this.imageBytesFuture,
|
this.imageBytesFuture,
|
||||||
this.sendToGroup,
|
this.sendToGroup,
|
||||||
});
|
this.mainCameraController});
|
||||||
final Future<Uint8List?>? imageBytesFuture;
|
final Future<Uint8List?>? imageBytesFuture;
|
||||||
final Group? sendToGroup;
|
final Group? sendToGroup;
|
||||||
final bool sharedFromGallery;
|
final bool sharedFromGallery;
|
||||||
final MediaFileService mediaFileService;
|
final MediaFileService mediaFileService;
|
||||||
|
final MainCameraController? mainCameraController;
|
||||||
@override
|
@override
|
||||||
State<ShareImageEditorView> createState() => _ShareImageEditorView();
|
State<ShareImageEditorView> createState() => _ShareImageEditorView();
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +71,7 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
if (media.type != MediaType.gif) {
|
if (media.type != MediaType.gif) {
|
||||||
layers.add(FilterLayerData());
|
layers.add(FilterLayerData(key: GlobalKey()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (widget.sendToGroup != null) {
|
if (widget.sendToGroup != null) {
|
||||||
|
|
@ -147,6 +149,7 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
removedLayers.clear();
|
removedLayers.clear();
|
||||||
layers.add(
|
layers.add(
|
||||||
TextLayerData(
|
TextLayerData(
|
||||||
|
key: GlobalKey(),
|
||||||
textLayersBefore: layers.whereType<TextLayerData>().length,
|
textLayersBefore: layers.whereType<TextLayerData>().length,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
@ -161,7 +164,7 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
undoLayers.clear();
|
undoLayers.clear();
|
||||||
removedLayers.clear();
|
removedLayers.clear();
|
||||||
layers.add(DrawLayerData());
|
layers.add(DrawLayerData(key: GlobalKey()));
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
@ -458,9 +461,16 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
|
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
|
|
||||||
|
Future.delayed(const Duration(milliseconds: 500), () async {
|
||||||
|
if (context.mounted) {
|
||||||
|
await widget.mainCameraController?.closeCamera();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
layers.insert(
|
layers.insert(
|
||||||
0,
|
0,
|
||||||
BackgroundLayerData(
|
BackgroundLayerData(
|
||||||
|
key: GlobalKey(),
|
||||||
image: currentImage,
|
image: currentImage,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
@ -526,6 +536,7 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
removedLayers.clear();
|
removedLayers.clear();
|
||||||
layers.add(
|
layers.add(
|
||||||
TextLayerData(
|
TextLayerData(
|
||||||
|
key: GlobalKey(),
|
||||||
offset: Offset(0, tabDownPosition),
|
offset: Offset(0, tabDownPosition),
|
||||||
textLayersBefore: layers.whereType<TextLayerData>().length,
|
textLayersBefore: layers.whereType<TextLayerData>().length,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue