如何在点击检测中跳过Flutter Widget?

时间:2019-03-29 18:41:31

标签: flutter

我正在尝试使用包含ListTile作为主要小部件的Checkbox来制作模态底部工作表。但是,Checkbox会收到轻敲事件,而不是ListTile,这将显示图块的墨水波纹效果,并使我实现两个onTap / onChanged回调。

我尝试不实现Checkbox的{​​{1}}回调并将其包装在onChanged小部件周围,但是在这两种情况下,AbsorbPointer也不会获得点击事件。

ListTile

我想以某种方式使return ListTile( onTap: onTap, title: Text("Show expired schedules"), leading: Checkbox(value: snapshot.data, onChanged: (_) => onTap()), ); 不可被点击,但是让Checkbox仍接收到点击事件。类似于ListTile,只是跳过一个Widget,而不是完全吸收tap事件。

2 个答案:

答案 0 :(得分:1)

Checkbox小部件包装在IgnorePointer小部件中,它应该可以工作:

return ListTile(
  onTap: onTap,
  title: Text("Show expired schedules"),
  leading: IgnorePointer(child: Checkbox(value: snapshot.data, onChanged: (_) => onTap())),
);

答案 1 :(得分:0)

您也可以使用AbsorbPointer来做到这一点

return ListTile(
  onTap: onTap,
  title: Text("Show expired schedules"),
  leading: AbsorbPointer(
    absorbing: _condition, // bool value, true makes it absorb touch event on CheckBox still making ListTile tappable. 
    child: Checkbox(value: snapshot.data, onChanged: (_) => onTap()),
  ),
);