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) {
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);

View File

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