@@ -42,6 +42,8 @@ class ImeSimulator {
4242 String textToType, {
4343 Finder ? finder,
4444 GetDeltaTextInputClient ? getter,
45+ bool settle = true ,
46+ int extraPumps = 0 ,
4547 }) async {
4648 final imeClient = _findImeClient (finder: finder, getter: getter);
4749
@@ -50,11 +52,16 @@ class ImeSimulator {
5052 "The target widget doesn't have a text selection to type into." );
5153
5254 for (final character in textToType.characters) {
53- await _typeCharacter (imeClient, character);
55+ await _typeCharacter (imeClient, character, settle : settle, extraPumps : extraPumps );
5456 }
5557 }
5658
57- Future <void > _typeCharacter (DeltaTextInputClient imeClient, String character) async {
59+ Future <void > _typeCharacter (
60+ DeltaTextInputClient imeClient,
61+ String character, {
62+ bool settle = true ,
63+ int extraPumps = 0 ,
64+ }) async {
5865 assert (imeClient.currentTextEditingValue != null );
5966 assert (imeClient.currentTextEditingValue! .selection.extentOffset != - 1 );
6067
@@ -93,15 +100,17 @@ class ImeSimulator {
93100 // await _sendDeltasThroughChannel(deltas);
94101
95102 // Let the app handle the deltas, however long it takes.
96- await _tester. pumpAndSettle ( );
103+ await _maybeSettleOrExtraPumps (settle : settle, extraPumps : extraPumps );
97104 }
98105
99106 /// Simulates the user pressing the tab button on a software keyboard.
100107 Future <void > pressTab ({
101108 Finder ? finder,
102109 GetDeltaTextInputClient ? getter,
110+ bool settle = true ,
111+ int extraPumps = 0 ,
103112 }) async {
104- await typeText ('\t ' );
113+ await typeText ('\t ' , settle : settle, extraPumps : extraPumps );
105114 }
106115
107116 /// Simulates the user pressing the backspace button.
@@ -111,6 +120,8 @@ class ImeSimulator {
111120 Future <void > backspace ({
112121 Finder ? finder,
113122 GetDeltaTextInputClient ? getter,
123+ bool settle = true ,
124+ int extraPumps = 0 ,
114125 }) async {
115126 final imeClient = _findImeClient (finder: finder, getter: getter);
116127
@@ -152,7 +163,7 @@ class ImeSimulator {
152163 // await _sendDeltasThroughChannel(deltas);
153164
154165 // Let the app handle the deltas, however long it takes.
155- await _tester. pumpAndSettle ( );
166+ await _maybeSettleOrExtraPumps (settle : settle, extraPumps : extraPumps );
156167 }
157168
158169 /// Simulates dispatching arbitrary deltas.
@@ -163,13 +174,15 @@ class ImeSimulator {
163174 List <TextEditingDelta > deltas, {
164175 Finder ? finder,
165176 GetDeltaTextInputClient ? getter,
177+ bool settle = true ,
178+ int extraPumps = 0 ,
166179 }) async {
167180 final imeClient = _findImeClient (finder: finder, getter: getter);
168181
169182 imeClient.updateEditingValueWithDeltas (deltas);
170183
171184 // Let the app handle the deltas.
172- await _tester. pumpAndSettle ( );
185+ await _maybeSettleOrExtraPumps (settle : settle, extraPumps : extraPumps );
173186 }
174187
175188 DeltaTextInputClient _findImeClient ({
@@ -270,6 +283,15 @@ class ImeSimulator {
270283 return 'TextAffinity.upstream' ;
271284 }
272285 }
286+
287+ Future <void > _maybeSettleOrExtraPumps ({bool settle = true , int extraPumps = 0 }) async {
288+ if (settle) {
289+ await _tester.pumpAndSettle ();
290+ }
291+ for (int i = 0 ; i < extraPumps; i += 1 ) {
292+ await _tester.pump ();
293+ }
294+ }
273295}
274296
275297typedef GetDeltaTextInputClient = DeltaTextInputClient Function ();
0 commit comments