@@ -42,6 +42,8 @@ class ImeSimulator {
42
42
String textToType, {
43
43
Finder ? finder,
44
44
GetDeltaTextInputClient ? getter,
45
+ bool settle = true ,
46
+ int extraPumps = 0 ,
45
47
}) async {
46
48
final imeClient = _findImeClient (finder: finder, getter: getter);
47
49
@@ -50,11 +52,16 @@ class ImeSimulator {
50
52
"The target widget doesn't have a text selection to type into." );
51
53
52
54
for (final character in textToType.characters) {
53
- await _typeCharacter (imeClient, character);
55
+ await _typeCharacter (imeClient, character, settle : settle, extraPumps : extraPumps );
54
56
}
55
57
}
56
58
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 {
58
65
assert (imeClient.currentTextEditingValue != null );
59
66
assert (imeClient.currentTextEditingValue! .selection.extentOffset != - 1 );
60
67
@@ -93,15 +100,17 @@ class ImeSimulator {
93
100
// await _sendDeltasThroughChannel(deltas);
94
101
95
102
// Let the app handle the deltas, however long it takes.
96
- await _tester. pumpAndSettle ( );
103
+ await _maybeSettleOrExtraPumps (settle : settle, extraPumps : extraPumps );
97
104
}
98
105
99
106
/// Simulates the user pressing the tab button on a software keyboard.
100
107
Future <void > pressTab ({
101
108
Finder ? finder,
102
109
GetDeltaTextInputClient ? getter,
110
+ bool settle = true ,
111
+ int extraPumps = 0 ,
103
112
}) async {
104
- await typeText ('\t ' );
113
+ await typeText ('\t ' , settle : settle, extraPumps : extraPumps );
105
114
}
106
115
107
116
/// Simulates the user pressing the backspace button.
@@ -111,6 +120,8 @@ class ImeSimulator {
111
120
Future <void > backspace ({
112
121
Finder ? finder,
113
122
GetDeltaTextInputClient ? getter,
123
+ bool settle = true ,
124
+ int extraPumps = 0 ,
114
125
}) async {
115
126
final imeClient = _findImeClient (finder: finder, getter: getter);
116
127
@@ -152,7 +163,7 @@ class ImeSimulator {
152
163
// await _sendDeltasThroughChannel(deltas);
153
164
154
165
// Let the app handle the deltas, however long it takes.
155
- await _tester. pumpAndSettle ( );
166
+ await _maybeSettleOrExtraPumps (settle : settle, extraPumps : extraPumps );
156
167
}
157
168
158
169
/// Simulates dispatching arbitrary deltas.
@@ -163,13 +174,15 @@ class ImeSimulator {
163
174
List <TextEditingDelta > deltas, {
164
175
Finder ? finder,
165
176
GetDeltaTextInputClient ? getter,
177
+ bool settle = true ,
178
+ int extraPumps = 0 ,
166
179
}) async {
167
180
final imeClient = _findImeClient (finder: finder, getter: getter);
168
181
169
182
imeClient.updateEditingValueWithDeltas (deltas);
170
183
171
184
// Let the app handle the deltas.
172
- await _tester. pumpAndSettle ( );
185
+ await _maybeSettleOrExtraPumps (settle : settle, extraPumps : extraPumps );
173
186
}
174
187
175
188
DeltaTextInputClient _findImeClient ({
@@ -270,6 +283,15 @@ class ImeSimulator {
270
283
return 'TextAffinity.upstream' ;
271
284
}
272
285
}
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
+ }
273
295
}
274
296
275
297
typedef GetDeltaTextInputClient = DeltaTextInputClient Function ();
0 commit comments