From 0d64647461bef49f7c133ebeee4abf749b895039 Mon Sep 17 00:00:00 2001 From: X Code Date: Mon, 31 Jan 2022 11:17:57 -0800 Subject: [PATCH] Refactor defaultEmbedBuilder --- .../widgets/embeds/default_embed_builder.dart | 36 +++++++++++-------- lib/src/widgets/embeds/image_resizer.dart | 5 +++ 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/src/widgets/embeds/default_embed_builder.dart b/lib/src/widgets/embeds/default_embed_builder.dart index 16ae4b7b..6ea1ce4c 100644 --- a/lib/src/widgets/embeds/default_embed_builder.dart +++ b/lib/src/widgets/embeds/default_embed_builder.dart @@ -63,10 +63,13 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller, text: 'Resize'.i18n, onPressed: () { Navigator.pop(context); + final res = _getImageNode(controller); showCupertinoModalPopup( context: context, builder: (context) { return ImageResizer( + imageNode: res.item2!, + offset: res.item1!, imageWidth: _widthHeight?.item1, imageHeight: _widthHeight?.item2, maxWidth: MediaQuery.of(context).size.width, @@ -80,16 +83,9 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller, color: Colors.cyanAccent, text: 'Copy'.i18n, onPressed: () { - var offset = controller.selection.start; - var imageNode = controller.queryNode(offset); - if (imageNode == null || !(imageNode is leaf.Embed)) { - offset = max(0, offset - 1); - imageNode = controller.queryNode(offset); - } - if (imageNode != null && imageNode is leaf.Embed) { - final imageUrl = imageNode.value.data; - controller.copiedImageUrl = imageUrl; - } + final imageNode = _getImageNode(controller).item2!; + final imageUrl = imageNode.value.data; + controller.copiedImageUrl = imageUrl; Navigator.pop(context); }, ); @@ -98,11 +94,7 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller, color: Colors.red.shade200, text: 'Remove'.i18n, onPressed: () { - var offset = controller.selection.start; - final imageNode = controller.queryNode(offset); - if (imageNode == null || !(imageNode is leaf.Embed)) { - offset = max(0, offset - 1); - } + final offset = _getImageNode(controller).item1!; controller.replaceText(offset, 1, '', TextSelection.collapsed(offset: offset)); Navigator.pop(context); @@ -143,6 +135,20 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller, } } +Tuple2 _getImageNode(QuillController controller) { + var offset = controller.selection.start; + var imageNode = controller.queryNode(offset); + if (imageNode == null || !(imageNode is leaf.Embed)) { + offset = max(0, offset - 1); + imageNode = controller.queryNode(offset); + } + if (imageNode != null && imageNode is leaf.Embed) { + return Tuple2(offset, imageNode); + } + + return const Tuple2(null, null); +} + Widget _menuOptionsForReadonlyImage( BuildContext context, String imageUrl, Image image) { return GestureDetector( diff --git a/lib/src/widgets/embeds/image_resizer.dart b/lib/src/widgets/embeds/image_resizer.dart index 74763528..2decf7d2 100644 --- a/lib/src/widgets/embeds/image_resizer.dart +++ b/lib/src/widgets/embeds/image_resizer.dart @@ -1,6 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import '../../models/documents/nodes/leaf.dart'; import '../../translations/toolbar.i18n.dart'; class ImageResizer extends StatefulWidget { @@ -9,6 +10,8 @@ class ImageResizer extends StatefulWidget { required this.imageHeight, required this.maxWidth, required this.maxHeight, + required this.offset, + required this.imageNode, Key? key}) : super(key: key); @@ -16,6 +19,8 @@ class ImageResizer extends StatefulWidget { final double? imageHeight; final double maxWidth; final double maxHeight; + final int offset; + final Embed imageNode; @override _ImageResizerState createState() => _ImageResizerState();