diff --git a/lib/src/custom_long_press_gesture_recognizer.dart b/lib/src/custom_long_press_gesture_recognizer.dart new file mode 100644 index 0000000..84cf4bd --- /dev/null +++ b/lib/src/custom_long_press_gesture_recognizer.dart @@ -0,0 +1,22 @@ +import 'package:flutter/gestures.dart'; + +const Duration _kLongPressTimeout = Duration(milliseconds: 250); + +const double _kTouchSlop = 5.0; + +class CustomLongPressGestureRecognizer extends LongPressGestureRecognizer { + CustomLongPressGestureRecognizer({ + Duration? duration, + super.postAcceptSlopTolerance, + super.supportedDevices, + super.debugOwner, + AllowedButtonsFilter? allowedButtonsFilter, + }) : super( + duration: duration ?? _kLongPressTimeout, + allowedButtonsFilter: allowedButtonsFilter, + ); + + @override + // TODO: implement preAcceptSlopTolerance + double? get preAcceptSlopTolerance => _kTouchSlop; +} diff --git a/lib/src/page_list_viewport_gestures.dart b/lib/src/page_list_viewport_gestures.dart index 06cd940..91d5e8b 100644 --- a/lib/src/page_list_viewport_gestures.dart +++ b/lib/src/page_list_viewport_gestures.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:flutter/gestures.dart'; import 'package:flutter/physics.dart'; import 'package:flutter/widgets.dart'; +import 'package:page_list_viewport/src/custom_long_press_gesture_recognizer.dart'; import 'logging.dart'; import 'page_list_viewport.dart'; @@ -300,19 +301,31 @@ class _PageListViewportGesturesState extends State wit onPointerDown: _onPointerDown, onPointerUp: _onPointerUp, onPointerCancel: _onPointerCancel, - child: GestureDetector( - onTapUp: widget.onTapUp, - onLongPressStart: widget.onLongPressStart, - onLongPressMoveUpdate: widget.onLongPressMoveUpdate, - onLongPressEnd: widget.onLongPressEnd, - onDoubleTapDown: widget.onDoubleTapDown, - onDoubleTap: widget.onDoubleTap, - onDoubleTapCancel: widget.onDoubleTapCancel, - onScaleStart: _onScaleStart, - onScaleUpdate: _onScaleUpdate, - onScaleEnd: _onScaleEnd, - supportedDevices: widget.panAndZoomPointerDevices, - child: widget.child, + child: RawGestureDetector( + gestures: { + CustomLongPressGestureRecognizer: GestureRecognizerFactoryWithHandlers( + () => CustomLongPressGestureRecognizer( + supportedDevices: widget.panAndZoomPointerDevices, + ), + (CustomLongPressGestureRecognizer instance) { + instance + ..onLongPressEnd = widget.onLongPressEnd + ..onLongPressStart = widget.onLongPressStart + ..onLongPressMoveUpdate = widget.onLongPressMoveUpdate; + }, + ), + }, + child: GestureDetector( + onTapUp: widget.onTapUp, + onDoubleTapDown: widget.onDoubleTapDown, + onDoubleTap: widget.onDoubleTap, + onDoubleTapCancel: widget.onDoubleTapCancel, + onScaleStart: _onScaleStart, + onScaleUpdate: _onScaleUpdate, + onScaleEnd: _onScaleEnd, + supportedDevices: widget.panAndZoomPointerDevices, + child: widget.child, + ), ), ); }