Skip to content

Commit 0d64647

Browse files
committed
Refactor defaultEmbedBuilder
1 parent 2baad69 commit 0d64647

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

lib/src/widgets/embeds/default_embed_builder.dart

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,13 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
6363
text: 'Resize'.i18n,
6464
onPressed: () {
6565
Navigator.pop(context);
66+
final res = _getImageNode(controller);
6667
showCupertinoModalPopup<void>(
6768
context: context,
6869
builder: (context) {
6970
return ImageResizer(
71+
imageNode: res.item2!,
72+
offset: res.item1!,
7073
imageWidth: _widthHeight?.item1,
7174
imageHeight: _widthHeight?.item2,
7275
maxWidth: MediaQuery.of(context).size.width,
@@ -80,16 +83,9 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
8083
color: Colors.cyanAccent,
8184
text: 'Copy'.i18n,
8285
onPressed: () {
83-
var offset = controller.selection.start;
84-
var imageNode = controller.queryNode(offset);
85-
if (imageNode == null || !(imageNode is leaf.Embed)) {
86-
offset = max(0, offset - 1);
87-
imageNode = controller.queryNode(offset);
88-
}
89-
if (imageNode != null && imageNode is leaf.Embed) {
90-
final imageUrl = imageNode.value.data;
91-
controller.copiedImageUrl = imageUrl;
92-
}
86+
final imageNode = _getImageNode(controller).item2!;
87+
final imageUrl = imageNode.value.data;
88+
controller.copiedImageUrl = imageUrl;
9389
Navigator.pop(context);
9490
},
9591
);
@@ -98,11 +94,7 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
9894
color: Colors.red.shade200,
9995
text: 'Remove'.i18n,
10096
onPressed: () {
101-
var offset = controller.selection.start;
102-
final imageNode = controller.queryNode(offset);
103-
if (imageNode == null || !(imageNode is leaf.Embed)) {
104-
offset = max(0, offset - 1);
105-
}
97+
final offset = _getImageNode(controller).item1!;
10698
controller.replaceText(offset, 1, '',
10799
TextSelection.collapsed(offset: offset));
108100
Navigator.pop(context);
@@ -143,6 +135,20 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
143135
}
144136
}
145137

138+
Tuple2<int?, leaf.Embed?> _getImageNode(QuillController controller) {
139+
var offset = controller.selection.start;
140+
var imageNode = controller.queryNode(offset);
141+
if (imageNode == null || !(imageNode is leaf.Embed)) {
142+
offset = max(0, offset - 1);
143+
imageNode = controller.queryNode(offset);
144+
}
145+
if (imageNode != null && imageNode is leaf.Embed) {
146+
return Tuple2(offset, imageNode);
147+
}
148+
149+
return const Tuple2(null, null);
150+
}
151+
146152
Widget _menuOptionsForReadonlyImage(
147153
BuildContext context, String imageUrl, Image image) {
148154
return GestureDetector(

lib/src/widgets/embeds/image_resizer.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/cupertino.dart';
22
import 'package:flutter/material.dart';
33

4+
import '../../models/documents/nodes/leaf.dart';
45
import '../../translations/toolbar.i18n.dart';
56

67
class ImageResizer extends StatefulWidget {
@@ -9,13 +10,17 @@ class ImageResizer extends StatefulWidget {
910
required this.imageHeight,
1011
required this.maxWidth,
1112
required this.maxHeight,
13+
required this.offset,
14+
required this.imageNode,
1215
Key? key})
1316
: super(key: key);
1417

1518
final double? imageWidth;
1619
final double? imageHeight;
1720
final double maxWidth;
1821
final double maxHeight;
22+
final int offset;
23+
final Embed imageNode;
1924

2025
@override
2126
_ImageResizerState createState() => _ImageResizerState();

0 commit comments

Comments
 (0)