Skip to content

Commit 634c21b

Browse files
Make settling optional for all key presses (Resolves #32) (#33)
1 parent 546b103 commit 634c21b

File tree

4 files changed

+286
-172
lines changed

4 files changed

+286
-172
lines changed

lib/src/input_method_engine.dart

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

275297
typedef GetDeltaTextInputClient = DeltaTextInputClient Function();

0 commit comments

Comments
 (0)