Ver código fonte

feat(mobile): Enhanced vertical swiping motion in image viewer (#932)

Alex 2 anos atrás
pai
commit
c8538cc62f

+ 14 - 16
mobile/lib/modules/asset_viewer/ui/remote_photo_view.dart

@@ -9,7 +9,6 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
   _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<RemotePhotoView> {
 
     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;