You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter:Listener包裹ListView时,点击Item如何屏蔽onPointerUp回调

解决方案

要实现点击Item时不触发外层Listener的onPointerUp回调,你可以在内部GestureDetector中添加onPointerUp回调,通过调用事件的stopPropagation()方法阻止指针事件向上冒泡。

修改后的代码如下:

Listener(
  onPointerUp: (event) {
    LogUtil.v('++++++onPointerUp++++');
  },
  child: ListView.builder(
    itemCount: 10,
    itemBuilder: (context, index) {
      return GestureDetector(
        onTap: () {
          LogUtil.v('++++++GestureDetector++++');
        },
        // 拦截指针事件,阻止向上传播
        onPointerUp: (event) {
          event.stopPropagation();
        },
        child: const Container(
          height: 200,
        ),
      );
    },
  ),
)

原理说明

Flutter的指针事件默认遵循冒泡传播机制:当子组件接收到指针事件后,如果不主动终止传播,事件会继续向上传递给父组件的指针监听器。通过在GestureDetector的onPointerUp中调用event.stopPropagation(),可以切断事件的传播路径,外层的Listener就不会再收到该点击事件的onPointerUp回调。

如果你不需要GestureDetector提供的高级手势识别能力,也可以直接用Listener包裹Item,在内部Listener的onPointerUp中处理业务逻辑并调用event.stopPropagation(),同样能达到效果。

内容的提问来源于stack exchange,提问作者zhouxinle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:05:11