From 755d7ed72d128a1784bc7ec20f6f2e206036d9ec Mon Sep 17 00:00:00 2001 From: X Code Date: Sun, 23 Jan 2022 23:16:01 -0800 Subject: [PATCH] [3.7.2] Reverted Embed toPlainText change --- CHANGELOG.md | 3 +++ lib/src/models/documents/nodes/leaf.dart | 8 +++---- ...editor_state_selection_delegate_mixin.dart | 22 ++++++++++++++++++- pubspec.yaml | 2 +- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f636b52d..ed59f074 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# [3.7.2] +* Reverted Embed toPlainText change. + # [3.7.1] * Change Embed toPlainText to be empty string. diff --git a/lib/src/models/documents/nodes/leaf.dart b/lib/src/models/documents/nodes/leaf.dart index 7fffa60a..feab276c 100644 --- a/lib/src/models/documents/nodes/leaf.dart +++ b/lib/src/models/documents/nodes/leaf.dart @@ -254,10 +254,8 @@ class Embed extends Leaf { @override Embeddable get value => super.value as Embeddable; - // Embed nodes are represented as empty string in plain text. + // Embed nodes are represented as unicode object replacement character in + // plain text. @override - String toPlainText() => ''; - - @override - String toString() => kObjectReplacementCharacter; + String toPlainText() => kObjectReplacementCharacter; } diff --git a/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart b/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart index 01a39db3..4982c801 100644 --- a/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart +++ b/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart @@ -3,6 +3,7 @@ import 'dart:math' as math; import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; +import '../../models/documents/nodes/leaf.dart'; import '../../utils/delta.dart'; import '../editor.dart'; @@ -19,9 +20,28 @@ mixin RawEditorStateSelectionDelegateMixin on EditorState final oldText = widget.controller.document.toPlainText(); final newText = value.text; final diff = getDiff(oldText, newText, cursorPosition); + final insertedText = _adjustInsertedText(diff.inserted); widget.controller.replaceText( - diff.start, diff.deleted.length, diff.inserted, value.selection); + diff.start, diff.deleted.length, insertedText, value.selection); + } + + String _adjustInsertedText(String text) { + // For clip from editor, it may contain image, a.k.a 65532 or '\uFFFC'. + // For clip from browser, image is directly ignore. + // Here we skip image when pasting. + if (!text.codeUnits.contains(Embed.kObjectReplacementInt)) { + return text; + } + + final sb = StringBuffer(); + for (var i = 0; i < text.length; i++) { + if (text.codeUnitAt(i) == Embed.kObjectReplacementInt) { + continue; + } + sb.write(text[i]); + } + return sb.toString(); } @override diff --git a/pubspec.yaml b/pubspec.yaml index 7b7e31fc..8c55ad31 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_quill description: A rich text editor supporting mobile and web (Demo App @ bulletjournal.us) -version: 3.7.1 +version: 3.7.2 #author: bulletjournal homepage: https://bulletjournal.us/home/index.html repository: https://github.com/singerdmx/flutter-quill