mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
commit
fc5832dcdf
@ -146,8 +146,7 @@ class GestureArena {
|
||||
} else {
|
||||
assert(disposition == GestureDisposition.accepted);
|
||||
if (state.isOpen) {
|
||||
if (state.eagerWinner == null)
|
||||
state.eagerWinner = member;
|
||||
state.eagerWinner ??= member;
|
||||
} else {
|
||||
_resolveInFavorOf(key, state, member);
|
||||
}
|
||||
@ -166,4 +165,4 @@ class GestureArena {
|
||||
}
|
||||
member.acceptGesture(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni
|
||||
// TODO(abarth): Maybe factor the slop handling out into a separate class?
|
||||
if (event.type == 'pointermove' && _getDistance(event) > kTouchSlop) {
|
||||
resolve(GestureDisposition.rejected);
|
||||
stopTrackingPointer(event.pointer);
|
||||
stopTrackingPointer(primaryPointer);
|
||||
} else {
|
||||
handlePrimaryPointer(event);
|
||||
}
|
||||
|
||||
@ -43,6 +43,15 @@ class TapGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
||||
}
|
||||
}
|
||||
|
||||
void resolve(GestureDisposition disposition) {
|
||||
if (_wonArena && disposition == GestureDisposition.rejected) {
|
||||
if (onTapCancel != null)
|
||||
onTapCancel();
|
||||
_reset();
|
||||
}
|
||||
super.resolve(disposition);
|
||||
}
|
||||
|
||||
void didExceedDeadline() {
|
||||
_checkDown();
|
||||
}
|
||||
|
||||
@ -161,19 +161,28 @@ void main() {
|
||||
tap.onTap = () {
|
||||
tapRecognized = true;
|
||||
};
|
||||
bool tapCanceled = false;
|
||||
tap.onTapCancel = () {
|
||||
tapCanceled = true;
|
||||
};
|
||||
|
||||
tap.addPointer(down3);
|
||||
GestureArena.instance.close(3);
|
||||
expect(tapRecognized, isFalse);
|
||||
expect(tapCanceled, isFalse);
|
||||
router.route(down3);
|
||||
expect(tapRecognized, isFalse);
|
||||
expect(tapCanceled, isFalse);
|
||||
|
||||
router.route(move3);
|
||||
expect(tapRecognized, isFalse);
|
||||
expect(tapCanceled, isTrue);
|
||||
router.route(up3);
|
||||
expect(tapRecognized, isFalse);
|
||||
expect(tapCanceled, isTrue);
|
||||
GestureArena.instance.sweep(3);
|
||||
expect(tapRecognized, isFalse);
|
||||
expect(tapCanceled, isTrue);
|
||||
|
||||
tap.dispose();
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user