Refactor defaultEmbedBuilder

pull/635/head
X Code 3 years ago
parent 2baad69af4
commit 0d64647461
  1. 36
      lib/src/widgets/embeds/default_embed_builder.dart
  2. 5
      lib/src/widgets/embeds/image_resizer.dart

@ -63,10 +63,13 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
text: 'Resize'.i18n,
onPressed: () {
Navigator.pop(context);
final res = _getImageNode(controller);
showCupertinoModalPopup<void>(
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<int?, leaf.Embed?> _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(

@ -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();

Loading…
Cancel
Save