Flutter InteractiveViewer class 加载新图片时如何 Zoom/scale out

Flutter InteractiveViewer class how to Zoom/scale out when loading a new Image

我喜欢 InteractiveViewer class,它让我的用户可以张开双指来放大图像小部件。

但是,它给了我一个错误。如果用户在图像上保持放大,然后退出包含该图像的 DetailsS​​creen,然后使用新的细节和图像再次激活 DetailScreen,则新图像将按与旧图像相同的比例放大。 InteractiveViewer 的比例没有被重置。

我试图通过在其构造函数中为 InteractiveViewer 提供一个 transformationController: imageZoomController, 参数来重置它。然后,当我退出 DetailScreen 时,我尝试 imageZoomController.dispose(),但这会导致很多崩溃...嗯。

它只需要重置为完全缩小,我需要重新触发 InteractiveViewer 的初始 minScale: 1, 参数。

我不赞成使用 InteractiveViewer 的 onInteractionEnd 参数,因为当我故意放大图像时它会跳开,我觉得这很烦人。

感谢帮助。

你可以试试这个包:https://pub.dev/packages/photo_view

它还允许我们双击动画以初始化比例,甚至无需触摸控制器。

用法:

@override
Widget build(BuildContext context) {
  return Container(
    child: PhotoView(
      imageProvider: AssetImage("assets/large-image.jpg"),
    )
  );
}

通过实验找到了解决方案,它似乎在模拟器中工作,不太清楚为什么,但我希望问题解决了。

imageZoomController.value = Matrix4.identity();
Navigator.of(context).pop();

当我退出 DetailsS​​creen 时,imageZoomController.value 似乎将 InteractiveViewer 的缩放比例重置为 1。

感谢 Thea 的建议,如果其他人有我的问题并且我的解决方案不起作用,请尝试 Thea 的插件。

以后我会提供更多上下文、Widgets 等,不好意思。抱歉@Nisanth

viewController.value = Matrix4.identity();

让您对照片进行初始缩放

TransformationController viewController = TransformationController();

    var initialControllerValue;
    
    InteractiveViewer(
     
        transformationController: viewController,
        onInteractionStart: (details){

            initialControllerValue = viewController.value;
        },
    
        onInteractionEnd: (details){
   
            viewController.value = initialControllerValue;
        },