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;