首页 > 解决方案 > 如何使用 GestureDetector 的单个实例检测多个手势?

问题描述

我想做WhatsApp语音录音功能。用户点击并按住录制音频,但可以向左滑动取消。但是当我使用 GestureDetector 时,它只注册一种手势类型。

例如,如果用户以长按开始,则仅注册 onLongPress 手势。或者如果用户从水平拖动开始,则仅 onHorizo​​ntalDrag:

          onLongPressStart: _onPressStart,
          onLongPressUp: _onPressEnd,
          onHorizontalDragDown: _onHorizontalDragDown,
          onHorizontalDragUpdate: _onHorizontalDragUpdate,
          onHorizontalDragEnd: _onHorizontalDragEnd,

如何一个接一个地使用2个手势?

谢谢!

标签: flutterdartflutter-layoutflutter-animationgesturedetector

解决方案


尝试使用onLongPressMoveUpdate由提供的回调GestureDetector

这提供LongPressMoveUpdateDetails了一个名为 的属性offsetFromOrigin

offsetFromOrigin给你一个Offset对象,它的dx值就是你需要的。

GestureDetector(
  child: ...
  onLongPressMoveUpdate: (updateDetails) { 
      if (updateDetails.offsetFromOrigin.dx < 0) {
          // Handle horizontal drag towards left
      }
  }
)

或者,如果您不能使用上述方法,请查看这篇Medium 文章


推荐阅读