处理父小部件中的点击事件

tom*_*wyr 4 flutter

在我的应用程序树中,我有两个小部件:

GestureDetector(
   onTap: () => print('Outer'),
   child: IconButton(
     icon: Icon(Icons.add),
     onPressed: () => print('Inner')),
   ),
)
Run Code Online (Sandbox Code Playgroud)

他们都试图对触摸事件做出反应,但只有孩子的回调被调用(这是默认行为)。是否可以以阻止祖先将触摸事件传播给其子级的方式定义小部件?或者也许唯一的方法是自己实现这种行为,例如通过使用GestureArena?

Rom*_*tel 13

我认为您正在寻找AbsorbPointer小部件:

在命中测试期间吸收指针的小部件。

当 absorbing 为 true 时,该小部件通过终止自身的命中测试来防止其子树接收指针事件。它在布局期间仍然消耗空间并像往常一样绘制其子级。它只是防止其子级成为定位事件的目标,因为它从 RenderBox.hitTest 返回 true。

你可以这样使用它:

GestureDetector(
  onTap: () => print('Outer'),
  child: AbsorbPointer(
    child: IconButton(
      icon: Icon(Icons.add),
      onPressed: () => print('Inner'),
    ),
  ),
),
Run Code Online (Sandbox Code Playgroud)

  • 按预期工作,谢谢。同样,您能想到一种解决方案,让父母和孩子都收到有关点击事件的通知吗? (5认同)