File tree Expand file tree Collapse file tree 2 files changed +20
-2
lines changed Expand file tree Collapse file tree 2 files changed +20
-2
lines changed Original file line number Diff line number Diff line change 11import 'dart:math' as math;
22
3+ import 'package:flutter/foundation.dart' ;
34import 'package:flutter/services.dart' show ClipboardData, Clipboard;
45import 'package:flutter/widgets.dart' ;
56import 'package:meta/meta.dart' ;
@@ -48,6 +49,20 @@ class QuillController extends ChangeNotifier {
4849 selection: const TextSelection .collapsed (offset: 0 ),
4950 );
5051
52+ // Expose current IME composing range for filtering out intermediate edits.
53+ final ValueNotifier <TextRange > _composingRangeNotifier =
54+ ValueNotifier <TextRange >(TextRange .empty);
55+
56+ /// Current IME (Chinese/Japanese etc input method) composing range.
57+ /// This can be used to filter out intermediate edits that happen during IME composition.
58+ ValueListenable <TextRange > get composing => _composingRangeNotifier;
59+
60+ @internal
61+ void setComposingRange (TextRange range) {
62+ if (_composingRangeNotifier.value == range) return ;
63+ _composingRangeNotifier.value = range;
64+ }
65+
5166 final QuillControllerConfig config;
5267
5368 /// Document managed by this controller.
Original file line number Diff line number Diff line change @@ -19,8 +19,11 @@ mixin RawEditorStateTextInputClientMixin on EditorState
1919
2020 set _lastKnownRemoteTextEditingValue (TextEditingValue ? value) {
2121 __lastKnownRemoteTextEditingValue = value;
22- if (composingRange.value != value? .composing) {
23- composingRange.value = value? .composing ?? TextRange .empty;
22+ final newRange = value? .composing ?? TextRange .empty;
23+ if (composingRange.value != newRange) {
24+ composingRange.value = newRange;
25+ // Forward composing range to the controller
26+ widget.controller.setComposingRange (newRange);
2427 }
2528 }
2629
You can’t perform that action at this time.
0 commit comments