fix player gesture

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-06-16 11:23:44 +08:00
parent a98a0df0ef
commit 2372951918
3 changed files with 46 additions and 2 deletions

View File

@@ -1,12 +1,15 @@
import 'package:flutter/gestures.dart'
show
PointerDownEvent,
GestureRecognizer,
RecognizerCallback,
ScaleGestureRecognizer,
PointerPanZoomStartEvent,
LongPressGestureRecognizer;
mixin PlayerGestureMixin on GestureRecognizer {
bool isPosAllowed = true;
bool _isPosAllowed = true;
@override
T? invokeCallback<T>(
@@ -14,7 +17,7 @@ mixin PlayerGestureMixin on GestureRecognizer {
RecognizerCallback<T> callback, {
String Function()? debugReport,
}) {
if (!isPosAllowed) return null;
if (!_isPosAllowed) return null;
return super.invokeCallback(name, callback, debugReport: debugReport);
}
}
@@ -29,6 +32,24 @@ class PlayerScaleGestureRecognizer extends ScaleGestureRecognizer
super.trackpadScrollCausesScale,
super.trackpadScrollToScaleFactor,
});
void _handleAllowedPointer() {
if (isReadyState) {
_isPosAllowed = isPosAllowed;
}
}
@override
void addAllowedPointer(PointerDownEvent event) {
_handleAllowedPointer();
super.addAllowedPointer(event);
}
@override
void addAllowedPointerPanZoom(PointerPanZoomStartEvent event) {
_handleAllowedPointer();
super.addAllowedPointerPanZoom(event);
}
}
class PlayerLongPressGestureRecognizer extends LongPressGestureRecognizer
@@ -40,4 +61,12 @@ class PlayerLongPressGestureRecognizer extends LongPressGestureRecognizer
super.debugOwner,
super.allowedButtonsFilter,
});
@override
void addAllowedPointer(PointerDownEvent event) {
if (state == .ready) {
_isPosAllowed = isPosAllowed;
}
super.addAllowedPointer(event);
}
}

View File

@@ -24,6 +24,8 @@ $ImageCachePatch = "lib/scripts/image_cache.patch"
$ImageAnimPatch = "lib/scripts/image_anim.patch"
$ScaleGesturePatch = "lib/scripts/scale_gesture.patch"
# TODO: remove
# https://github.com/flutter/flutter/issues/90223
$ModalBarrierPatch = "lib/scripts/modal_barrier.patch"
@@ -38,7 +40,7 @@ $picks = @()
$reverts = @()
$patches = @($ModalBarrierPatch, $TextSelectionPatch, $MouseCursorPatch,
$NavigationBarPatch, $PaddingPatch, $ImageCachePatch, $ImageAnimPatch,
$LayoutBuilderPatch)
$LayoutBuilderPatch, $ScaleGesturePatch)
switch ($platform.ToLower()) {
"android" {

View File

@@ -0,0 +1,13 @@
diff --git a/packages/flutter/lib/src/gestures/scale.dart b/packages/flutter/lib/src/gestures/scale.dart
index fe3cdf27a41..7fe56080bc1 100644
--- a/packages/flutter/lib/src/gestures/scale.dart
+++ b/packages/flutter/lib/src/gestures/scale.dart
@@ -398,6 +398,8 @@ class ScaleGestureRecognizer extends OneSequenceGestureRecognizer {
_ScaleState _state = _ScaleState.ready;
+ bool get isReadyState => _state == _ScaleState.ready;
+
Matrix4? _lastTransform;
/// {@template flutter.gestures.scale.trackpadScrollCausesScale}