From c8538cc62fed1677bba228998775ae02e110ed94 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 5 Nov 2022 22:59:06 -0500 Subject: [PATCH] feat(mobile): Enhanced vertical swiping motion in image viewer (#932) --- .../asset_viewer/ui/remote_photo_view.dart | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/mobile/lib/modules/asset_viewer/ui/remote_photo_view.dart b/mobile/lib/modules/asset_viewer/ui/remote_photo_view.dart index 6e6ecb45da..cc92ddc26f 100644 --- a/mobile/lib/modules/asset_viewer/ui/remote_photo_view.dart +++ b/mobile/lib/modules/asset_viewer/ui/remote_photo_view.dart @@ -9,7 +9,6 @@ class _RemotePhotoViewState extends State { _RemoteImageStatus _status = _RemoteImageStatus.empty; bool _zoomedIn = false; - static const int swipeThreshold = 100; late CachedNetworkImageProvider fullProvider; late CachedNetworkImageProvider previewProvider; late CachedNetworkImageProvider thumbnailProvider; @@ -20,34 +19,33 @@ class _RemotePhotoViewState extends State { return IgnorePointer( ignoring: !allowMoving, - child: PhotoView( - imageProvider: _imageProvider, - minScale: PhotoViewComputedScale.contained, - enablePanAlways: true, - scaleStateChangedCallback: _scaleStateChanged, - onScaleEnd: _onScaleListener, + child: Listener( + onPointerMove: handleSwipUpDown, + child: PhotoView( + imageProvider: _imageProvider, + minScale: PhotoViewComputedScale.contained, + enablePanAlways: false, + scaleStateChangedCallback: _scaleStateChanged, + ), ), ); } - void _onScaleListener( - BuildContext context, - ScaleEndDetails details, - PhotoViewControllerValue controllerValue, - ) { - // Disable swipe events when zoomed in + void handleSwipUpDown(PointerMoveEvent details) { + int sensitivity = 10; + if (_zoomedIn) { return; } - if (controllerValue.position.dy > swipeThreshold) { + + if (details.delta.dy > sensitivity) { widget.onSwipeDown(); - } else if (controllerValue.position.dy < -swipeThreshold) { + } else if (details.delta.dy < -sensitivity) { widget.onSwipeUp(); } } void _scaleStateChanged(PhotoViewScaleState state) { - // _onScaleListener; _zoomedIn = state != PhotoViewScaleState.initial; if (_zoomedIn) { widget.isZoomedListener.value = true;