竞技场的规则似乎已经改变。现在,竞技场宣布具有主动接收器的手势将获胜。确实,这甚至可以进一步增加手势的响应速度。但是,由于本机视图不声明手势,仅当没有其他活动的检测器/接收器声明手势时才使用手势,因此我怀疑垂直拖动甚至不会从WebView作为手势进入竞技场。这就是为什么任何轻微的水平拖动都会导致水平拖动手势获胜的原因-
因为根本没有其他小部件可以要求任何手势。
您可以扩展
VerticalDragGestureRecognizer,使其接受手势:
class PlatformViewVerticalGestureRecognizer extends VerticalDragGestureRecognizer { PlatformViewVerticalGestureRecognizer({PointerDeviceKind kind}) : super(kind: kind); Offset _dragDistance = Offset.zero; @override void addPointer(PointerEvent event) { startTrackingPointer(event.pointer); } @override void handleEvent(PointerEvent event) { _dragDistance = _dragDistance + event.delta; if (event is PointerMoveEvent) { final double dy = _dragDistance.dy.abs(); final double dx = _dragDistance.dx.abs(); if (dy > dx && dy > kTouchSlop) { // vertical drag - accept resolve(GestureDisposition.accepted); _dragDistance = Offset.zero; } else if (dx > kTouchSlop && dx > dy) { // horizontal drag - stop tracking stopTrackingPointer(event.pointer); _dragDistance = Offset.zero; } } } @override String get debugDescription => 'horizontal drag (platform view)'; @override void didStopTrackingLastPointer(int pointer) {}}之后,您可以在中使用新类
gestureRecognizers:
PageView.builder( itemCount: 5, itemBuilder: (context, index) { return WebView( initialUrl: 'https://flutter.dev/docs', gestureRecognizers: [ Factory(() => PlatformViewVerticalGestureRecognizer()), ].toSet(), ); },);


