diff --git a/lib/common/widgets/flutter/text_field/controller.dart b/lib/common/widgets/flutter/text_field/controller.dart index 889dbf8a4..0b7205d7b 100644 --- a/lib/common/widgets/flutter/text_field/controller.dart +++ b/lib/common/widgets/flutter/text_field/controller.dart @@ -176,7 +176,6 @@ class RichTextItem { if (insertionOffset == 0 && range.start == 0) { final insertedLength = delta.textInserted.length; - controller.newSelection = TextSelection.collapsed(offset: insertedLength); if (!isRich && delta.isText) { text = delta.textInserted + text; range = TextRange(start: range.start, end: range.start + text.length); @@ -208,7 +207,6 @@ class RichTextItem { if (range.end == insertionOffset) { final end = insertionOffset + delta.textInserted.length; - controller.newSelection = TextSelection.collapsed(offset: end); if ((isText && delta.isText) || (isComposing && delta.isComposing)) { text += delta.textInserted; range = TextRange(start: range.start, end: end); @@ -232,7 +230,6 @@ class RichTextItem { final leadingText = text.substring(0, insertionOffset - range.start); final trailingString = text.substring(leadingText.length); final insertEnd = insertionOffset + delta.textInserted.length; - controller.newSelection = TextSelection.collapsed(offset: insertEnd); if (delta.isText) { text = leadingText + delta.textInserted + trailingString; range = TextRange( @@ -380,9 +377,6 @@ class RichTextItem { ); final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed( - offset: replacedRange.start + delta.replacementText.length, - ); return null; } else { final leadingText = text.substring( @@ -391,7 +385,6 @@ class RichTextItem { ); final trailString = text.substring(replacedRange.end - range.start); final insertEnd = replacedRange.start + delta.replacementText.length; - controller.newSelection = TextSelection.collapsed(offset: insertEnd); final config = delta.config; final insertedItem = RichTextItem( type: config.type, @@ -429,7 +422,6 @@ class RichTextItem { id = config.id; final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed(offset: end); return null; } @@ -443,7 +435,6 @@ class RichTextItem { id = config.id; final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed(offset: end); return (remove: false, toAdd: null); } return (remove: true, toAdd: null); @@ -459,7 +450,6 @@ class RichTextItem { ); final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed(offset: end); return null; } else { text = text.replaceRange( @@ -478,7 +468,6 @@ class RichTextItem { id: config.id, range: TextRange(start: replacedRange.start, end: end), ); - controller.newSelection = TextSelection.collapsed(offset: end); return (remove: false, toAdd: [insertedItem]); } } @@ -489,7 +478,6 @@ class RichTextItem { id = config.id; final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed(offset: end); return null; } @@ -512,7 +500,6 @@ class RichTextItem { ); final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed(offset: end); return null; } else { final end = range.start + delta.replacementText.length; @@ -525,7 +512,6 @@ class RichTextItem { id: config.id, range: TextRange(start: range.start, end: end), ); - controller.newSelection = TextSelection.collapsed(offset: end); text = text.substring(replacedRange.end - range.start); range = TextRange(start: end, end: end + text.length); return (remove: true, toAdd: [insertedItem]); @@ -538,7 +524,6 @@ class RichTextItem { id = config.id; final end = range.start + text.length; range = TextRange(start: range.start, end: end); - controller.newSelection = TextSelection.collapsed(offset: end); return null; } @@ -613,6 +598,7 @@ class RichTextEditingController extends TextEditingController { onMention?.call(); } + newSelection = delta.selection; if (items.isEmpty) { final config = delta.config; items.add( @@ -624,9 +610,6 @@ class RichTextEditingController extends TextEditingController { id: config.id, ), ); - newSelection = TextSelection.collapsed( - offset: delta.textInserted.length, - ); return; } for (int index = 0; index < items.length; index++) { @@ -652,6 +635,7 @@ class RichTextEditingController extends TextEditingController { } case TextEditingDeltaReplacement e: + newSelection = delta.selection; for (int index = 0; index < items.length; index++) { final item = items[index]; ({bool remove, List? toAdd})? res = item.onReplace( diff --git a/lib/common/widgets/flutter/text_field/editable_text.dart b/lib/common/widgets/flutter/text_field/editable_text.dart index ac66f86bf..260b74e25 100644 --- a/lib/common/widgets/flutter/text_field/editable_text.dart +++ b/lib/common/widgets/flutter/text_field/editable_text.dart @@ -2627,7 +2627,7 @@ class EditableTextState extends State composing: TextRange.empty, ), ); - final newValue = _value.copyWith( + final newValue = TextEditingValue( text: widget.controller.plainText, selection: widget.controller.newSelection, composing: TextRange.empty, @@ -3569,7 +3569,7 @@ class EditableTextState extends State remoteValue = delta.apply(remoteValue); } - final newValue = _value.copyWith( + final newValue = TextEditingValue( text: widget.controller.plainText, selection: widget.controller.newSelection, composing: textEditingDeltas.last.composing, @@ -5552,7 +5552,7 @@ class EditableTextState extends State ), ); - final newValue = oldValue.copyWith( + final newValue = TextEditingValue( text: widget.controller.plainText, selection: widget.controller.newSelection, composing: TextRange.empty,