Compare commits

..

1 Commits

Author SHA1 Message Date
dom
1c19925b58 fix RichTextField text replace
Signed-off-by: dom <githubaccount56556@proton.me>
2026-06-12 12:16:47 +08:00
2 changed files with 32 additions and 22 deletions

View File

@@ -5529,28 +5529,38 @@ class EditableTextState extends State<EditableText>
void _replaceText(ReplaceTextIntent intent) { void _replaceText(ReplaceTextIntent intent) {
final TextEditingValue oldValue = _value; final TextEditingValue oldValue = _value;
final TextEditingValue newValue = intent.currentTextEditingValue.replaced( final TextEditingValue newValue;
intent.replacementRange,
intent.replacementText,
);
// bggRGjQaUbCoE _replaceText // bggRGjQaUbCoE _replaceText
widget.controller.syncRichText( if (intent.replacementText.isEmpty) {
intent.replacementText.isEmpty widget.controller.syncRichText(
? TextEditingDeltaDeletion( TextEditingDeltaDeletion(
oldText: oldValue.text, oldText: oldValue.text,
deletedRange: intent.replacementRange, deletedRange: intent.replacementRange,
selection: newValue.selection, selection: .collapsed(offset: intent.replacementRange.start),
composing: newValue.composing, composing: .empty,
) ),
: TextEditingDeltaReplacement( );
oldText: oldValue.text, newValue = TextEditingValue(
replacementText: intent.replacementText, text: widget.controller.plainText,
replacedRange: intent.replacementRange, selection: widget.controller.newSelection,
selection: newValue.selection, composing: .empty,
composing: newValue.composing, );
), } 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); userUpdateTextEditingValue(newValue, intent.cause);

View File

@@ -334,8 +334,8 @@ abstract class CommonRichTextPubPageState<T extends CommonRichTextPubPage>
_onInsertUser(res, fromClick); _onInsertUser(res, fromClick);
} else if (res is Set<MentionItem>) { } else if (res is Set<MentionItem>) {
for (final e in res) { for (final e in res) {
e.checked = false; _onInsertUser(e..checked = false, fromClick);
_onInsertUser(e, fromClick); fromClick = true;
} }
res.clear(); res.clear();
} }