diff --git a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart index c32819677200b..8286a511d6e6a 100644 --- a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart @@ -1393,9 +1393,9 @@ abstract class DefaultTextEditingStrategy with CompositionAwareMixin implements lastEditingState = newEditingState; _editingDeltaState = newTextEditingDeltaState; onChange!(lastEditingState, _editingDeltaState); - // Flush delta after it has been sent to framework. - _editingDeltaState = null; } + // Flush delta state. + _editingDeltaState = null; } void handleBeforeInput(DomEvent event) { diff --git a/lib/web_ui/test/engine/text_editing_test.dart b/lib/web_ui/test/engine/text_editing_test.dart index 2bc1b0710353b..3ba4ca7ec2d3a 100644 --- a/lib/web_ui/test/engine/text_editing_test.dart +++ b/lib/web_ui/test/engine/text_editing_test.dart @@ -2793,6 +2793,26 @@ Future testMain() async { expect(textEditingDeltaState.composingOffset, -1); expect(textEditingDeltaState.composingExtent, -1); }); + + test('Delta state is cleared after setting editing state', (){ + editingStrategy!.enable( + multilineConfig, + onChange: trackEditingState, + onAction: trackInputAction, + ); + final DomHTMLInputElement input = editingStrategy!.domElement! as DomHTMLInputElement; + input.value = 'foo bar'; + input.dispatchEvent(createDomEvent('Event', 'input')); + expect( + lastEditingState, + EditingState(text: 'foo bar', baseOffset: 7, extentOffset: 7), + ); + expect(editingStrategy!.editingDeltaState.oldText, 'foo bar'); + + editingStrategy!.setEditingState(EditingState(text: 'foo bar baz', baseOffset: 11, extentOffset: 11)); + input.dispatchEvent(createDomEvent('Event', 'input')); + expect(editingStrategy?.editingDeltaState.oldText, 'foo bar baz'); + }); }); group('text editing styles', () {