颤动禁用整个屏幕上的触摸

Flutter disable touch on the entire screen

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

您可以将小部件包裹在 AbsorbPointer 中,它不会接收到触摸。要再次启用触摸,您可以设置 absorbing: false

AbsorbPointer(
  child: YourWidget(...),
);

两种方法:

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

在此处检查与示例的区别:

我们可以通过两种方式做到这一点 第一种是@Sanjayrajsinh 所说的

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

  2. IgnorePointer

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

    IgnorePointer的用法与AbsorbPointer相同,效果相同。用法如下:

    要禁用小部件上的触摸功能,您需要将整个小部件包裹在 IgnorePointer

    如果您使用 IgnorePointer Widget 将 Flutter 中的任何 widget 包装起来,您可以启用或禁用该 widget。这意味着如果您将整个 UI 包裹在 IgnorePointer 小部件中,那么您可以通过切换“忽略”[=43= 来控制用户在 UI 上的交互] 的 IgnorePointer 个小部件。当“忽略”为 true 时,IgnorePointer 小部件会吸收小部件子部件中的所有交互并以某种方式禁用它。

    IgnorePointer(
      ignoring: **YOUR_CONDITION**
      child: Container(...),
    ),
    

让我们看一个使用 IgnorePointer 小部件的实际示例。

当我们开始尝试实现诸如切换要删除的小部件上的选择之类的东西时,这种情况很常见。

结果:

示例: 按住 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'),
              ),
               
              ...

希望对大家有所帮助!祝你有个愉快的一天。