【问题标题】:Handle tap event in parent widget处理父小部件中的点击事件
【发布时间】:2018-09-04 10:43:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: flutter


    【解决方案1】:

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

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

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

    你可以这样使用它:

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

    【讨论】:

    • 按预期工作,谢谢。同样,你能想出一个解决方案,让父母和孩子都被通知点击事件吗?
    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多