fix ime bug for windows

pull/1154/head
wangpw2 2 years ago
parent 0e63ac312c
commit 7885e61e4f
  1. 22
      lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart

@ -63,6 +63,8 @@ mixin RawEditorStateTextInputClientMixin on EditorState
); );
_updateSizeAndTransform(); _updateSizeAndTransform();
//update IME position for Windows
_updateComposingRectIfNeeded();
//update IME position for Macos //update IME position for Macos
_updateCaretRectIfNeeded(); _updateCaretRectIfNeeded();
_textInputConnection!.setEditingState(_lastKnownRemoteTextEditingValue!); _textInputConnection!.setEditingState(_lastKnownRemoteTextEditingValue!);
@ -70,18 +72,32 @@ mixin RawEditorStateTextInputClientMixin on EditorState
_textInputConnection!.show(); _textInputConnection!.show();
} }
void _updateComposingRectIfNeeded() {
final composingRange = _lastKnownRemoteTextEditingValue?.composing ??
textEditingValue.composing;
if (hasConnection) {
assert(mounted);
final offset = composingRange.isValid ? composingRange.start : 0;
final composingRect =
renderEditor.getLocalRectForCaret(TextPosition(offset: offset));
_textInputConnection!.setComposingRect(composingRect);
SchedulerBinding.instance
.addPostFrameCallback((_) => _updateComposingRectIfNeeded());
}
}
void _updateCaretRectIfNeeded() { void _updateCaretRectIfNeeded() {
if (hasConnection) { if (hasConnection) {
if (renderEditor.selection.isValid && if (renderEditor.selection.isValid &&
renderEditor.selection.isCollapsed) { renderEditor.selection.isCollapsed) {
final TextPosition currentTextPosition = final currentTextPosition =
TextPosition(offset: renderEditor.selection.baseOffset); TextPosition(offset: renderEditor.selection.baseOffset);
final Rect caretRect = final caretRect =
renderEditor.getLocalRectForCaret(currentTextPosition); renderEditor.getLocalRectForCaret(currentTextPosition);
_textInputConnection!.setCaretRect(caretRect); _textInputConnection!.setCaretRect(caretRect);
} }
SchedulerBinding.instance SchedulerBinding.instance
.addPostFrameCallback((Duration _) => _updateCaretRectIfNeeded()); .addPostFrameCallback((_) => _updateCaretRectIfNeeded());
} }
} }

Loading…
Cancel
Save