【发布时间】:2021-10-18 06:29:13
【问题描述】:
我正在尝试将我的整个应用程序包装在一个小部件中,以防止触摸事件根据某些条件通过视图层次结构向下传递。我已经有一个WrapperlifecycleListener:
@override
Widget build(BuildContext context) {
return WrapperAppLifecycleListener(
child: Listener(
onPointerDown: (_) {
//other stuff I do
},
child: MyApp(),
),
);
}
我期待能够做这样的事情:
onPointerDown: (_) {
if(passThrough){
return true;
} else {
return false;
}
},
但到目前为止我发现的所有小部件都将void 作为其回调的返回类型,是否有任何小部件可以做类似的事情?
编辑:当用户与应用程序本身交互时,条件会发生变化,因此 IgnorePointer 或 AbsorbPointer 在这种情况下将不起作用。为了更清楚地考虑我想在触摸输入后禁用所有触摸输入的情况,因此假设:
@override
Widget build(BuildContext context) {
return WrapperAppLifecycleListener(
child: Listener(
onPointerDown: (_) {
if(absorb){
return false;
} else {
return true;
}
absorb = true;
Future.delayed(Duration(seconds:2)).then((value) => absorb = false);
},
child: MyApp(),
),
);
}
【问题讨论】:
-
“触摸事件”是指基本上所有的输入事件?
-
我建议使用
IgnorePointer()之类的东西。它有一个ignore字段,可以设置为真或假,这将避免其任何子节点接收命中事件。 -
@nvoigt 好吧,重点是单击,但我可以处理任何事件
-
@SupremeDeity 我对此进行了调查,问题是我还需要知道何时在该级别发生点击,并且 IgnorePointer 似乎没有提供,除非我错过了一些东西。抱歉,如果不清楚,我会更新我的问题
-
以上仅适用于您需要检测每个级别的事件时,如果您只需要检测父级别的点击事件,仍然推荐
AbsorbPointer()。
标签: flutter