12

有什么方法可以阻止我的屏幕接收触摸事件,我不想为我的应用程序中的每个小部件禁用触摸。我只想锁定应用程序,使其不接收触摸事件。我怎样才能做到这一点?

4

4 回答 4

43

你可以把你的小部件包裹起来AbsorbPointer,它不会收到触摸。要再次启用触摸,您可以设置absorbing: false

AbsorbPointer(
  child: YourWidget(...),
);
于 2019-01-16T15:58:02.287 回答
5

正如@Sanjayrajsinh 所说,我们可以通过两种方式做到这一点

  1. 上面给出了AbsorbPointer使用的答案

  2. 忽略指针

    IgnorePointer在命中测试期间不可见的小部件。

    IgnorePointer的用法和AbsorbPointer一样,效果也是一样的。用法如下:

    要禁用对小部件的触摸,您需要将整个小部件包装在里面IgnorePointer

    如果您在 Flutter 中使用IgnorePointerWidget 包装任何小部件,则可以启用或禁用该小部件。这意味着如果您将整个 UI 包装在 IgnorePointer Widget 中,那么您可以通过切换IgnorePointerWidget 的 '<em>ignoring' 属性来控制该 UI 上的用户交互。当 'ignoring' 为真时,IgnorePointer 小部件会吸收小部件子级中的所有交互,并以某种方式禁用它。

    IgnorePointer(
      ignoring: **YOUR_CONDITION**
      child: Container(...),
    ),
    
于 2020-12-10T05:21:23.763 回答
2

两种方法:

  1. 吸收指针
  2. 忽略指针

检查与此处示例的差异:

于 2020-10-02T07:12:42.163 回答
0

让我们看一个使用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'),
              ),
               
              ...

希望它会帮助别人!祝你今天过得愉快。

于 2021-08-30T14:25:43.660 回答