如何获取点击位置 (GestureDetector)?

per*_*tus 3 dart flutter

我正在尝试在我的zoomable_images 插件中实现双击缩放,但GestureTapCallback不提供点击位置信息。

理想情况下,偏移量将由回调返回。是否有其他 API 用于此?

Col*_*son 10

您可以提供GestureTapDownCallback回调作为构造函数的onTapDown参数GestureDetector。将GestureTapDownCallback采取TapDownDetails包括水龙头的全球地位的说法。然后,您可以使用BuildContext.findRenderObject和将其转换为相对坐标RenderBox.globalToLocal

Offset _tapPosition;

void _handleTapDown(TapDownDetails details) {
  final RenderBox referenceBox = context.findRenderObject();
  setState(() {
    _tapPosition = referenceBox.globalToLocal(details.globalPosition);
  });
}

@override
Widget build(BuildContext context) {
  return new GestureDetector(
     /* ... */
     onTapDown: _handleTapDown,
  );
}
Run Code Online (Sandbox Code Playgroud)

在您的onDoubleTap处理程序中,您可以参考_tapPosition以找出最近点击的位置。

有关此操作的示例,请参阅InkWell

  • 你知道吗,你完全正确——没有办法获得双击的位置,而且应该有。我提交了 https://github.com/flutter/flutter/issues/10048 来跟踪这个。 (3认同)