【问题标题】:Flutter: Disabling Multi-Touch/Drag with Gesture DetectorFlutter:使用手势检测器禁用多点触控/拖动
【发布时间】:2019-10-01 09:37:28
【问题描述】:

我目前正在构建一个具有多个处理功能的 Slider 小部件,并且目前正在实施手势检测器。我有一个问题,如果您用第二根手指触摸/拖动屏幕,检测器会识别它并调用 onDragUpdate 函数,这是我试图禁用的功能 - 当一根手指拖动手柄时,手势检测器不应为第二根手指调用更新,但仍应允许第一根手指调用更新。

例如,如果您用手指 1(精细)滑动手柄,然后添加第二根手指,即手指 2,即使两个手指都在屏幕上,手势检测器也应该只识别手指 1。

我知道 Listener 类中有一个函数允许您指定设备(使用 details.device),但有没有办法使用 Gesture Detector 类来实现这一点?

目前正在研究手势检测器的不同实施者,包括查看此答案https://stackoverflow.com/a/56037327/12147590,但我仍在苦苦挣扎。如果有人可以为我指出正确的方向或用简单的语言进一步解释答案,那就太好了,干杯:)

【问题讨论】:

  • 你确定,你真的需要实现你自己的滑块吗?盒子里的那个是非常可定制的
  • 在这里,在 Flutter 1.7 中发布:medium.com/flutter/…(以及以防万一的参考链接:api.flutter.dev/flutter/material/RangeSlider-class.html
  • 我看到你编辑的问题。只需为所有多点触控手势设置一个空但非空的处理程序
  • 应用程序本身基于自定义小部件,这个特殊的滑块允许在同一个滑块上使用超过 2 个手柄(材料应用程序没有实现)
  • 超过 2 个处理程序? 0_o 我做过很多奇怪的概念,但这看起来很荒谬))

标签: flutter dart


【解决方案1】:

根据班级reference

尝试识别与其非空对应的手势 回调。

所以如果你这样写:

GestureDetector(
  onDragUpdate: (updateDetails) {
    // Single finger drag, update your handlers
  },
  onPanDown: (_){}, 
  onPanStart: (_){}, 
  onPanUpdate: (_){}, 
  onPanEnd: (_){}, 
  onPanCancel: (){},
  child: Container(
    color: Colors.yellow,
    child: Text('TURN LIGHTS ON'),
  ),
)

它不会对多点触控做出反应,因此您不必禁用任何东西

UPD:根据问题编辑,您应该为所有多点触控事件设置空但非空的回调,因此两个手指拖动将由空回调处理,但单指不是

【讨论】:

  • 同时使用 Pan 和 Scale 回调会产生错误,因为“scale 是 pan 的超集”。尝试仅使用缩放回调,但这并没有解决问题。
  • 不,这也不起作用:/ 确实需要一种方法来指定指针(就像您可以在侦听器类中做的那样)
  • 我也刚刚意识到 - 这个解决方案解决了全部问题,因为我仍然希望第一根手指更新小部件(即使第二根手指在屏幕上)。
【解决方案2】:

当我在处理另一个单独的问题时,我碰巧也通过使用解决方案 here 解决了这个问题

【讨论】:

    猜你喜欢
    • 2020-11-13
    • 1970-01-01
    • 2016-01-27
    • 2022-01-26
    • 2020-08-17
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多