Added `unknownEmbedBuilder` to QuillEditor (#1073)

* Added `unknownEmbedBuilder` to QuillEditor

* `unknownEmbedBuilder` constructor parameter
pull/1076/head
Alex Isaienko 2 years ago committed by GitHub
parent 61a4c6cc35
commit 0e5556424d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 39
      lib/src/widgets/editor.dart

@ -173,6 +173,7 @@ class QuillEditor extends StatefulWidget {
this.onSingleLongTapMoveUpdate,
this.onSingleLongTapEnd,
this.embedBuilders,
this.unknownEmbedBuilder,
this.linkActionPickerDelegate = defaultLinkActionPickerDelegate,
this.customStyleBuilder,
this.locale,
@ -359,6 +360,7 @@ class QuillEditor extends StatefulWidget {
onSingleLongTapEnd;
final Iterable<EmbedBuilder>? embedBuilders;
final EmbedsBuilder? unknownEmbedBuilder;
final CustomStyleBuilder? customStyleBuilder;
/// The locale to use for the editor toolbar, defaults to system locale
@ -491,7 +493,13 @@ class QuillEditorState extends State<QuillEditor>
node,
readOnly,
) =>
_buildCustomBlockEmbed(node, context, controller, readOnly),
_buildCustomBlockEmbed(
node,
context,
controller,
readOnly,
widget.unknownEmbedBuilder,
),
linkActionPickerDelegate: widget.linkActionPickerDelegate,
customStyleBuilder: widget.customStyleBuilder,
floatingCursorDisabled: widget.floatingCursorDisabled,
@ -525,29 +533,38 @@ class QuillEditorState extends State<QuillEditor>
return editor;
}
Widget _buildCustomBlockEmbed(Embed node, BuildContext context,
QuillController controller, bool readOnly) {
Widget _buildCustomBlockEmbed(
Embed node,
BuildContext context,
QuillController controller,
bool readOnly,
EmbedsBuilder? unknownEmbedBuilder,
) {
final builders = widget.embedBuilders;
var _node = node;
// Creates correct node for custom embed
if (node.value.type == BlockEmbed.customType) {
_node = Embed(CustomBlockEmbed.fromJsonString(node.value.data));
}
if (builders != null) {
var _node = node;
// Creates correct node for custom embed
if (node.value.type == BlockEmbed.customType) {
_node = Embed(CustomBlockEmbed.fromJsonString(node.value.data));
}
for (final builder in builders) {
if (builder.key == _node.value.type) {
return builder.build(context, controller, _node, readOnly);
}
}
}
if (unknownEmbedBuilder != null) {
return unknownEmbedBuilder(context, controller, _node, readOnly);
}
throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by supplied '
'embed builders. You must pass your own builder function to '
'embedBuilders property of QuillEditor or QuillField widgets.',
'embedBuilders property of QuillEditor or QuillField widgets or '
'specify an unknownEmbedBuilder.',
);
}

Loading…
Cancel
Save