有什么方法可以阻止我的屏幕接收触摸事件,我不想为我的应用程序中的每个小部件禁用触摸。我只想锁定应用程序,使其不接收触摸事件。我怎样才能做到这一点?
4 回答
你可以把你的小部件包裹起来AbsorbPointer
,它不会收到触摸。要再次启用触摸,您可以设置absorbing: false
AbsorbPointer(
child: YourWidget(...),
);
正如@Sanjayrajsinh 所说,我们可以通过两种方式做到这一点
上面给出了AbsorbPointer使用的答案
忽略指针
IgnorePointer
在命中测试期间不可见的小部件。IgnorePointer的用法和AbsorbPointer一样,效果也是一样的。用法如下:
要禁用对小部件的触摸,您需要将整个小部件包装在里面
IgnorePointer
如果您在 Flutter 中使用
IgnorePointer
Widget 包装任何小部件,则可以启用或禁用该小部件。这意味着如果您将整个 UI 包装在 IgnorePointer Widget 中,那么您可以通过切换IgnorePointer
Widget 的 '<em>ignoring' 属性来控制该 UI 上的用户交互。当 'ignoring' 为真时,IgnorePointer 小部件会吸收小部件子级中的所有交互,并以某种方式禁用它。IgnorePointer( ignoring: **YOUR_CONDITION** child: Container(...), ),
两种方法:
- 吸收指针
- 忽略指针
检查与此处示例的差异:
让我们看一个使用IgnorePointer
小部件的实际示例。
当我们开始尝试实现诸如切换小部件上的选择以删除或类似的事情时,这种情况很常见。
结果:
示例 Senario : 按住 WhatsApp 消息并删除顶部的选项。如果在此选项处于活动状态时点击其他任何地方,它将消失。
我是这样实现的。
appBar: AppBar(
title: Text('MyApp'),
actions: [
if (_selected != null) // <-- Delete button only appear something selected.
IconButton(
icon: Icon(Icons.delete),
onPressed: () {
// Delete Code here
}
]
),
body: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
print('Tapped');
setState(() { _selected = null });
},
child: IgnorePointer(
ignoring: _selected != null ? true : false, // <-- Ignore only when selecting something.
child: Column(
children: [
...
// This is a sample message
GestureDetector(
onLongPress: () {
setState(() { _selected = messageId });
}
child: Container(
child: Text('This is a message'),
),
...
希望它会帮助别人!祝你今天过得愉快。