mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Wait until the end of the microtask to tell gesture recognizers that they've won in the gesture arena. This lets recognizers dispose reject themselves at arbitrary times without triggering gestures in awkward call stacks. Fixes #3183
42 lines
1.1 KiB
Dart
42 lines
1.1 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/gestures.dart';
|
|
import 'package:test/test.dart';
|
|
import 'package:quiver/testing/async.dart';
|
|
|
|
class TestGestureFlutterBinding extends BindingBase with GestureBinding { }
|
|
|
|
void ensureGestureBinding() {
|
|
if (GestureBinding.instance == null)
|
|
new TestGestureFlutterBinding();
|
|
assert(GestureBinding.instance != null);
|
|
}
|
|
|
|
class GestureTester {
|
|
GestureTester._(this.async);
|
|
|
|
final FakeAsync async;
|
|
|
|
void closeArena(int pointer) {
|
|
GestureBinding.instance.gestureArena.close(pointer);
|
|
}
|
|
|
|
void route(PointerEvent event) {
|
|
GestureBinding.instance.pointerRouter.route(event);
|
|
async.flushMicrotasks();
|
|
}
|
|
}
|
|
|
|
typedef void GestureTest(GestureTester tester);
|
|
|
|
void testGesture(String description, GestureTest callback) {
|
|
test(description, () {
|
|
new FakeAsync().run((FakeAsync async) {
|
|
callback(new GestureTester._(async));
|
|
});
|
|
});
|
|
}
|