Flutter 中可以通过 GestureDetector 来监听全局点击事件。

  1. 在 MaterialApp 中设置全局的 GestureDetector:
MaterialApp(
  home: GestureDetector(
    onTap: () {
      // 全局点击事件
    },
    child: MyHomePage(),
  ),
);
  1. 如果需要排除某些 Widget,可以在 onTap 回调中判断点击的位置是否在排除的 Widget 上:
MaterialApp(
  home: GestureDetector(
    onTap: (TapDownDetails details) {
      RenderBox box = context.findRenderObject();
      Offset localOffset = box.globalToLocal(details.globalPosition);
      if (box.hitTest(BoxHitTestResult(), position: localOffset)) {
        // 点击的位置在排除的 Widget 上,不处理
        return;
      }
      // 全局点击事件
    },
    child: MyHomePage(),
  ),
);

这里使用了 RenderBox 的 hitTest 方法来判断点击的位置是否在 Widget 上。

Flutter 全局点击事件监听 - 完美解决方案

原文地址: https://www.cveoy.top/t/topic/kpfw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录