From f37e332de97a5d838614faa765ed78267c742119 Mon Sep 17 00:00:00 2001 From: dom Date: Fri, 12 Jun 2026 11:32:26 +0800 Subject: [PATCH] fix RichTextField text replace Signed-off-by: dom --- .../flutter/text_field/editable_text.dart | 50 +++++++++++-------- .../publish/common_rich_text_pub_page.dart | 4 +- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/lib/common/widgets/flutter/text_field/editable_text.dart b/lib/common/widgets/flutter/text_field/editable_text.dart index 34a643c4d..8693025ca 100644 --- a/lib/common/widgets/flutter/text_field/editable_text.dart +++ b/lib/common/widgets/flutter/text_field/editable_text.dart @@ -5529,28 +5529,38 @@ class EditableTextState extends State void _replaceText(ReplaceTextIntent intent) { final TextEditingValue oldValue = _value; - final TextEditingValue newValue = intent.currentTextEditingValue.replaced( - intent.replacementRange, - intent.replacementText, - ); + final TextEditingValue newValue; // bggRGjQaUbCoE _replaceText - widget.controller.syncRichText( - intent.replacementText.isEmpty - ? TextEditingDeltaDeletion( - oldText: oldValue.text, - deletedRange: intent.replacementRange, - selection: newValue.selection, - composing: newValue.composing, - ) - : TextEditingDeltaReplacement( - oldText: oldValue.text, - replacementText: intent.replacementText, - replacedRange: intent.replacementRange, - selection: newValue.selection, - composing: newValue.composing, - ), - ); + if (intent.replacementText.isEmpty) { + widget.controller.syncRichText( + TextEditingDeltaDeletion( + oldText: oldValue.text, + deletedRange: intent.replacementRange, + selection: .collapsed(offset: intent.replacementRange.start), + composing: .empty, + ), + ); + newValue = TextEditingValue( + text: widget.controller.plainText, + selection: widget.controller.newSelection, + composing: .empty, + ); + } else { + newValue = intent.currentTextEditingValue.replaced( + intent.replacementRange, + intent.replacementText, + ); + widget.controller.syncRichText( + TextEditingDeltaReplacement( + oldText: oldValue.text, + replacementText: intent.replacementText, + replacedRange: intent.replacementRange, + selection: newValue.selection, + composing: newValue.composing, + ), + ); + } userUpdateTextEditingValue(newValue, intent.cause); diff --git a/lib/pages/common/publish/common_rich_text_pub_page.dart b/lib/pages/common/publish/common_rich_text_pub_page.dart index 89b5ff0eb..350479f1f 100644 --- a/lib/pages/common/publish/common_rich_text_pub_page.dart +++ b/lib/pages/common/publish/common_rich_text_pub_page.dart @@ -332,8 +332,8 @@ abstract class CommonRichTextPubPageState _onInsertUser(res, fromClick); } else if (res is Set) { for (final e in res) { - e.checked = false; - _onInsertUser(e, fromClick); + _onInsertUser(e..checked = false, fromClick); + fromClick = true; } res.clear(); }