flutter - 在 InteractiveViewer 中使用 GestureDetector
问题描述
是否可以在 InteractiveViewer 中使用 GestureDetector(特别是 onTapUp 手势)?
我知道 InteractiveViewer 本身使用 GestureDetector 并覆盖 onScaleEnd、onScaleStart 和 onScaleUpdate 方法来实现平移。但是,onTapUp 没有被覆盖,这让我认为有可能使用它。
解决方案
我做了一些挖掘,并在InteractiveViewer 的 TransformationController 文档中找到了toScene()方法:
返回给定视口点的场景点。
视口点是相对于父级的,而场景点是相对于子级的,与变换无关。使用视口点调用 toScene 本质上会返回给定变换位于视口点下方的场景坐标。
视口变换为子项的倒数(即向左移动子项相当于向右移动视口)。
当确定父事件发生在子事件的何处时,此方法通常很有用。此示例显示如何确定在子项上发生对父项的点击位置。
GestureDetector( onTapUp: (TapUpDetails details) { _childWasTappedAt = _transformationController.toScene( details.localPosition, ); }, child: InteractiveViewer( transformationController: _transformationController, child: child, ), ); }
因此,建议的解决方案似乎不是将 GestureDetector 作为孩子,而是用 GestureDetector 包装 InteractiveViewer,使用自定义 TransformationController,并从此控制器获取相对于查看器视口的位置。
推荐阅读
- sql - 如何从 REGEXP_EXTRACT_ALL 旋转数组构建
- ios - 集合视图不显示数据
- python - RuntimeError:针对 API 版本 0xe 编译的模块,但此版本的 numpy 为 0xd
- php - Laravel 8 - 关系返回 null
- collections - 以相同的方式处理单个和多个元素(“透明”映射运算符)
- reactjs - 为什么我的 React 应用程序没有在 Vercel 或 Nettlify 上提取 API?
- json - 使用 Webhooks for Pinescript 4.0 发送策略数据
- tensorflow - 我想在我的项目中使用不同版本的 Tensorflow
- python - 需要匹配精确的十进制输出Python
- scriptella - Scriptella 对空查询的操作