@@ -6,6 +6,8 @@ import 'package:flutter/foundation.dart' show ValueNotifier, kIsWeb;
6
6
import 'package:flutter/material.dart' show Theme;
7
7
import 'package:flutter/scheduler.dart' show SchedulerBinding;
8
8
import 'package:flutter/services.dart' ;
9
+ import '../../../delta/delta_diff.dart' ;
10
+ import '../../../document/document.dart' ;
9
11
import '../raw_editor.dart' ;
10
12
import 'diff_services.dart' ;
11
13
import 'formatters/text_editing_delta_formatters.dart' ;
@@ -222,6 +224,28 @@ mixin RawEditorStateTextInputClientMixin on EditorState
222
224
return ;
223
225
}
224
226
227
+ if (kIsWeb) {
228
+ final effectiveLastKnownValue = _lastKnownRemoteTextEditingValue! ;
229
+ _lastKnownRemoteTextEditingValue = value;
230
+ final oldText = effectiveLastKnownValue.text;
231
+ final text = value.text;
232
+ final cursorPosition = value.isComposingRangeValid
233
+ ? value.composing.end
234
+ : value.selection.extentOffset;
235
+ final diff = getDiff (oldText, text, cursorPosition);
236
+ if (diff.deleted.isEmpty && diff.inserted.isEmpty) {
237
+ widget.controller.updateSelection (value.selection, ChangeSource .local);
238
+ } else {
239
+ widget.controller.replaceText (
240
+ diff.start,
241
+ diff.deleted.length,
242
+ diff.inserted,
243
+ value.selection,
244
+ );
245
+ }
246
+ return ;
247
+ }
248
+
225
249
final textEditingDlta = getTextEditingDelta (currentTextEditingValue, value);
226
250
_lastKnownRemoteTextEditingValue = value;
227
251
_apply ([textEditingDlta]);
0 commit comments