From eb56c5a28703d6faf941971b7e24f0c95567e5b7 Mon Sep 17 00:00:00 2001 From: X Code Date: Mon, 17 Jan 2022 23:02:49 -0800 Subject: [PATCH] Option to save image --- lib/src/utils/simple_dialog_item.dart | 32 +++++++++++++++++++ lib/src/widgets/editor.dart | 46 ++++++++++++++++++++------- pubspec.yaml | 1 + 3 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 lib/src/utils/simple_dialog_item.dart diff --git a/lib/src/utils/simple_dialog_item.dart b/lib/src/utils/simple_dialog_item.dart new file mode 100644 index 00000000..f751b1d9 --- /dev/null +++ b/lib/src/utils/simple_dialog_item.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +class SimpleDialogItem extends StatelessWidget { + const SimpleDialogItem( + {required this.icon, + required this.color, + required this.text, + required this.onPressed, + Key? key}) + : super(key: key); + + final IconData icon; + final Color color; + final String text; + final VoidCallback onPressed; + + @override + Widget build(BuildContext context) { + return SimpleDialogOption( + onPressed: onPressed, + child: Row( + children: [ + Icon(icon, size: 36, color: color), + Padding( + padding: const EdgeInsetsDirectional.only(start: 16), + child: Text(text), + ), + ], + ), + ); + } +} diff --git a/lib/src/widgets/editor.dart b/lib/src/widgets/editor.dart index c1c62c92..dee22c12 100644 --- a/lib/src/widgets/editor.dart +++ b/lib/src/widgets/editor.dart @@ -8,12 +8,14 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:gallery_saver/gallery_saver.dart'; import 'package:string_validator/string_validator.dart'; import '../models/documents/document.dart'; import '../models/documents/nodes/container.dart' as container_node; import '../models/documents/nodes/leaf.dart' as leaf; import '../models/documents/nodes/line.dart'; +import '../utils/simple_dialog_item.dart'; import '../utils/string_helper.dart'; import 'box.dart'; import 'controller.dart'; @@ -209,17 +211,39 @@ Widget defaultEmbedBuilder( return GestureDetector( onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => ImageTapWrapper( - imageProvider: imageUrl.startsWith('http') - ? NetworkImage(imageUrl) - : isBase64(imageUrl) - ? Image.memory(base64.decode(imageUrl)) - as ImageProvider? - : FileImage(io.File(imageUrl)), - ))); + showDialog( + context: context, + builder: (context) => SimpleDialog(children: [ + SimpleDialogItem( + icon: Icons.save, + color: Colors.greenAccent, + text: 'Save', + onPressed: () { + // TODO: handle base64 and etc. + GallerySaver.saveImage(imageUrl); + }, + ), + SimpleDialogItem( + icon: Icons.zoom_in, + color: Colors.cyanAccent, + text: 'Zoom', + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ImageTapWrapper( + imageProvider: imageUrl + .startsWith('http') + ? NetworkImage(imageUrl) + : isBase64(imageUrl) + ? Image.memory( + base64.decode(imageUrl)) + as ImageProvider? + : FileImage(io.File(imageUrl)), + ))); + }, + ) + ])); }, child: image); case 'video': diff --git a/pubspec.yaml b/pubspec.yaml index 12edce78..857932b8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -27,6 +27,7 @@ dependencies: youtube_player_flutter: ^8.0.0 diff_match_patch: ^0.4.1 i18n_extension: ^4.1.3 + gallery_saver: ^2.3.2 dev_dependencies: flutter_test: