@@ -35,14 +35,20 @@ class TestGestureFlutterBinding extends BindingBase with GestureBinding, Schedul
35
35
return _instance! ;
36
36
}
37
37
38
- HandleEventCallback ? callback;
38
+ HandleEventCallback ? onHandlePointerEvent;
39
+
40
+ @override
41
+ void handlePointerEvent (PointerEvent event) {
42
+ onHandlePointerEvent? .call (event);
43
+ super .handlePointerEvent (event);
44
+ }
45
+
46
+ HandleEventCallback ? onHandleEvent;
39
47
40
48
@override
41
49
void handleEvent (PointerEvent event, HitTestEntry entry) {
42
50
super .handleEvent (event, entry);
43
- if (callback != null ) {
44
- callback? .call (event);
45
- }
51
+ onHandleEvent? .call (event);
46
52
}
47
53
}
48
54
@@ -58,7 +64,7 @@ void main() {
58
64
);
59
65
60
66
final List <PointerEvent > events = < PointerEvent > [];
61
- binding.callback = events.add;
67
+ binding.onHandleEvent = events.add;
62
68
63
69
GestureBinding .instance.platformDispatcher.onPointerDataPacket? .call (packet);
64
70
expect (events.length, 2 );
@@ -76,7 +82,7 @@ void main() {
76
82
);
77
83
78
84
final List <PointerEvent > events = < PointerEvent > [];
79
- binding.callback = events.add;
85
+ binding.onHandleEvent = events.add;
80
86
81
87
GestureBinding .instance.platformDispatcher.onPointerDataPacket? .call (packet);
82
88
expect (events.length, 3 );
@@ -101,7 +107,7 @@ void main() {
101
107
GestureBinding .instance.pointerRouter.addGlobalRoute (pointerRouterEvents.add);
102
108
103
109
final List <PointerEvent > events = < PointerEvent > [];
104
- binding.callback = events.add;
110
+ binding.onHandleEvent = events.add;
105
111
106
112
GestureBinding .instance.platformDispatcher.onPointerDataPacket? .call (packet);
107
113
expect (events.length, 3 );
@@ -126,7 +132,7 @@ void main() {
126
132
);
127
133
128
134
final List <PointerEvent > events = < PointerEvent > [];
129
- binding.callback = events.add;
135
+ binding.onHandleEvent = events.add;
130
136
131
137
GestureBinding .instance.platformDispatcher.onPointerDataPacket? .call (packet);
132
138
expect (events.length, 2 );
@@ -143,7 +149,7 @@ void main() {
143
149
);
144
150
145
151
final List <PointerEvent > events = < PointerEvent > [];
146
- binding.callback = (PointerEvent event) {
152
+ binding.onHandleEvent = (PointerEvent event) {
147
153
events.add (event);
148
154
if (event is PointerDownEvent ) {
149
155
binding.cancelPointer (event.pointer);
@@ -389,12 +395,36 @@ void main() {
389
395
);
390
396
391
397
final List <PointerEvent > events = < PointerEvent > [];
392
- binding.callback = events.add;
398
+ binding.onHandleEvent = events.add;
393
399
394
400
binding.platformDispatcher.onPointerDataPacket? .call (packet);
395
401
expect (events.length, 3 );
396
402
expect (events[0 ], isA <PointerPanZoomStartEvent >());
397
403
expect (events[1 ], isA <PointerPanZoomUpdateEvent >());
398
404
expect (events[2 ], isA <PointerPanZoomEndEvent >());
399
405
});
406
+
407
+ test ('Error handling' , () {
408
+ const ui.PointerDataPacket packet = ui.PointerDataPacket (
409
+ data: < ui.PointerData > [
410
+ ui.PointerData (change: ui.PointerChange .down),
411
+ ui.PointerData (change: ui.PointerChange .up),
412
+ ],
413
+ );
414
+
415
+ final List <String > events = < String > [];
416
+ binding.onHandlePointerEvent = (PointerEvent event) { throw Exception ('zipzapzooey $event ' ); };
417
+ FlutterError .onError = (FlutterErrorDetails details) { events.add (details.toString ()); };
418
+ try {
419
+ GestureBinding .instance.platformDispatcher.onPointerDataPacket? .call (packet);
420
+ expect (events.length, 1 );
421
+ expect (events[0 ], contains ('while handling a pointer data\n packet' )); // The default stringifying behavior uses 65 character wrapWidth.
422
+ expect (events[0 ], contains ('zipzapzooey' ));
423
+ expect (events[0 ], contains ('PointerDownEvent' ));
424
+ expect (events[0 ], isNot (contains ('PointerUpEvent' ))); // Failure happens on the first message, remaining messages aren't processed.
425
+ } finally {
426
+ binding.onHandlePointerEvent = null ;
427
+ FlutterError .onError = FlutterError .presentError;
428
+ }
429
+ });
400
430
}
0 commit comments