diff --git a/lib/src/editor/raw_editor/raw_editor_state_text_input_client_mixin.dart b/lib/src/editor/raw_editor/raw_editor_state_text_input_client_mixin.dart index dc9b0ba11..03c75a864 100644 --- a/lib/src/editor/raw_editor/raw_editor_state_text_input_client_mixin.dart +++ b/lib/src/editor/raw_editor/raw_editor_state_text_input_client_mixin.dart @@ -222,8 +222,12 @@ mixin RawEditorStateTextInputClientMixin on EditorState _lastKnownRemoteTextEditingValue = value; final oldText = effectiveLastKnownValue.text; final text = value.text; - final cursorPosition = value.selection.extentOffset; - final diff = getDiff(oldText, text, cursorPosition); + + // Dynamically calculate cursor position to resolve misalignment issues when inputting Chinese with Sogou Pinyin. + final effectiveCursorPosition = value.isComposingRangeValid + ? value.composing.end + : value.selection.extentOffset; + final diff = getDiff(oldText, text, effectiveCursorPosition); if (diff.deleted.isEmpty && diff.inserted.isEmpty) { widget.controller.updateSelection(value.selection, ChangeSource.local); } else {