Unverified Commit e912b91c authored by chunhtai's avatar chunhtai Committed by GitHub

Add Supported devices to the TapGestureRecognizer (#96560)

parent 9c231067
...@@ -136,8 +136,10 @@ typedef GestureTapCancelCallback = void Function(); ...@@ -136,8 +136,10 @@ typedef GestureTapCancelCallback = void Function();
/// any buttons. /// any buttons.
abstract class BaseTapGestureRecognizer extends PrimaryPointerGestureRecognizer { abstract class BaseTapGestureRecognizer extends PrimaryPointerGestureRecognizer {
/// Creates a tap gesture recognizer. /// Creates a tap gesture recognizer.
BaseTapGestureRecognizer({ Object? debugOwner }) ///
: super(deadline: kPressTimeout , debugOwner: debugOwner); /// {@macro flutter.gestures.GestureRecognizer.supportedDevices}
BaseTapGestureRecognizer({ Object? debugOwner, Set<PointerDeviceKind>? supportedDevices })
: super(deadline: kPressTimeout , debugOwner: debugOwner, supportedDevices: supportedDevices);
bool _sentTapDown = false; bool _sentTapDown = false;
bool _wonArenaForPrimaryPointer = false; bool _wonArenaForPrimaryPointer = false;
...@@ -346,7 +348,10 @@ abstract class BaseTapGestureRecognizer extends PrimaryPointerGestureRecognizer ...@@ -346,7 +348,10 @@ abstract class BaseTapGestureRecognizer extends PrimaryPointerGestureRecognizer
/// * [MultiTapGestureRecognizer] /// * [MultiTapGestureRecognizer]
class TapGestureRecognizer extends BaseTapGestureRecognizer { class TapGestureRecognizer extends BaseTapGestureRecognizer {
/// Creates a tap gesture recognizer. /// Creates a tap gesture recognizer.
TapGestureRecognizer({ Object? debugOwner }) : super(debugOwner: debugOwner); ///
/// {@macro flutter.gestures.GestureRecognizer.supportedDevices}
TapGestureRecognizer({ Object? debugOwner, Set<PointerDeviceKind>? supportedDevices })
: super(debugOwner: debugOwner, supportedDevices: supportedDevices);
/// A pointer has contacted the screen at a particular location with a primary /// A pointer has contacted the screen at a particular location with a primary
/// button, which might be the start of a tap. /// button, which might be the start of a tap.
......
...@@ -119,6 +119,84 @@ void main() { ...@@ -119,6 +119,84 @@ void main() {
tap.dispose(); tap.dispose();
}); });
testGesture('Should recognize tap for supported devices only', (GestureTester tester) {
final TapGestureRecognizer tap = TapGestureRecognizer(
supportedDevices: <PointerDeviceKind>{ PointerDeviceKind.mouse, PointerDeviceKind.stylus },
);
bool tapRecognized = false;
tap.onTap = () {
tapRecognized = true;
};
const PointerDownEvent touchDown = PointerDownEvent(
pointer: 1,
position: Offset(10.0, 10.0),
);
const PointerUpEvent touchUp = PointerUpEvent(
pointer: 1,
position: Offset(11.0, 9.0),
);
tap.addPointer(touchDown);
tester.closeArena(1);
expect(tapRecognized, isFalse);
tester.route(touchDown);
expect(tapRecognized, isFalse);
tester.route(touchUp);
expect(tapRecognized, isFalse);
GestureBinding.instance!.gestureArena.sweep(1);
expect(tapRecognized, isFalse);
const PointerDownEvent mouseDown = PointerDownEvent(
kind: PointerDeviceKind.mouse,
pointer: 1,
position: Offset(10.0, 10.0),
);
const PointerUpEvent mouseUp = PointerUpEvent(
kind: PointerDeviceKind.mouse,
pointer: 1,
position: Offset(11.0, 9.0),
);
tap.addPointer(mouseDown);
tester.closeArena(1);
expect(tapRecognized, isFalse);
tester.route(mouseDown);
expect(tapRecognized, isFalse);
tester.route(mouseUp);
expect(tapRecognized, isTrue);
GestureBinding.instance!.gestureArena.sweep(1);
expect(tapRecognized, isTrue);
tapRecognized = false;
const PointerDownEvent stylusDown = PointerDownEvent(
kind: PointerDeviceKind.stylus,
pointer: 1,
position: Offset(10.0, 10.0),
);
const PointerUpEvent stylusUp = PointerUpEvent(
kind: PointerDeviceKind.stylus,
pointer: 1,
position: Offset(11.0, 9.0),
);
tap.addPointer(stylusDown);
tester.closeArena(1);
expect(tapRecognized, isFalse);
tester.route(stylusDown);
expect(tapRecognized, isFalse);
tester.route(stylusUp);
expect(tapRecognized, isTrue);
GestureBinding.instance!.gestureArena.sweep(1);
expect(tapRecognized, isTrue);
tap.dispose();
});
testGesture('Details contain the correct device kind', (GestureTester tester) { testGesture('Details contain the correct device kind', (GestureTester tester) {
final TapGestureRecognizer tap = TapGestureRecognizer(); final TapGestureRecognizer tap = TapGestureRecognizer();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment