Save image option

pull/593/head
X Code 3 years ago
parent 379f35d71f
commit 35721db59d
  1. 32
      lib/src/utils/simple_dialog_item.dart
  2. 51
      lib/src/widgets/editor.dart
  3. 1
      pubspec.yaml

@ -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),
),
],
),
);
}
}

@ -8,6 +8,7 @@ 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';
@ -15,6 +16,7 @@ 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/platform_helper.dart';
import '../utils/simple_dialog_item.dart';
import '../utils/string_helper.dart';
import 'box.dart';
import 'controller.dart';
@ -202,23 +204,48 @@ Widget defaultEmbedBuilder(
? Image.memory(base64.decode(imageUrl))
: Image.file(io.File(imageUrl));
if (!readOnly) {
if (!readOnly || !isMobile()) {
return image;
}
/// We provide these option menu only for mobile platform
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<Object>?
: 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).then((_) =>
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Saved'))));
},
),
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<Object>?
: FileImage(io.File(imageUrl)),
)));
},
)
]));
},
child: image);
case 'video':

@ -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:

Loading…
Cancel
Save