pasteText method
Paste text from Clipboard.
Implementation
@override
Future<void> pasteText(SelectionChangedCause cause) async {
if (widget.readOnly) {
return;
}
if (controller.copiedImageUrl != null) {
final index = textEditingValue.selection.baseOffset;
final length = textEditingValue.selection.extentOffset - index;
final copied = controller.copiedImageUrl!;
controller.replaceText(index, length, BlockEmbed.image(copied.url), null);
if (copied.styleString.isNotEmpty) {
controller.formatText(getEmbedNode(controller, index + 1).offset, 1, StyleAttribute(copied.styleString));
}
controller.copiedImageUrl = null;
await Clipboard.setData(const ClipboardData(text: ''));
return;
}
final selection = textEditingValue.selection;
if (!selection.isValid) {
return;
}
// Snapshot the input before using `await`.
// See https://github.com/flutter/flutter/issues/11427
final text = await Clipboard.getData(Clipboard.kTextPlain);
if (text != null) {
_replaceText(ReplaceTextIntent(textEditingValue, text.text!, selection, cause));
bringIntoView(textEditingValue.selection.extent);
// Collapse the selection and hide the toolbar and handles.
userUpdateTextEditingValue(
TextEditingValue(
text: textEditingValue.text,
selection: TextSelection.collapsed(offset: textEditingValue.selection.end),
),
cause,
);
return;
}
if (widget.onImagePaste != null) {
final image = await Pasteboard.image;
if (image == null) {
return;
}
final imageUrl = await widget.onImagePaste!(image);
if (imageUrl == null) {
return;
}
controller.replaceText(
textEditingValue.selection.end,
0,
BlockEmbed.image(imageUrl),
null,
);
}
}