AbsorbPointerIgnorePointer的Flutter 有什么不同?

文件提到:

AbsorbPointer通过终止自身的命中测试来防止其子树接收指针事件.

IgnorePointer,它也阻止其子级接收指针事件,但它本身对命中测试不可见.

我不明白这两者在现实生活中有什么不同.

推荐答案

不同的是,当我们有两个相互重叠的小部件时,这两个小部件都可以接收点击.

考虑一个红色和蓝色的正方形,两个可点击,蓝色广场较小,在红场的顶部:

Stack(
  alignment: Alignment.center,
  children: [
     Container(color: Colors.red),
     Container(width: 42, height: 42, color: Colors.blue),
  ],
)

默认情况下,如果没有IgnorePointer/AbsorbPointer,点击蓝色方块将在蓝色上发送单击事件,而红色则什么也得不到.

在这种情况下,将蓝色方块包装成AbsorbPointer意味着当点击蓝色方块时,蓝色方块和红色方块都不会收到单击事件.

如果我们改用IgnorePointer,当点击蓝色方块时,红色方块将收到点击事件.

Flutter相关问答推荐

如何使一个悬浮的appbar在flutter?

Android Emulator冻结,但在调整窗口大小时解冻

底部导航栏项目在抖动中不更改 colored颜色

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

BottomNavigationBar-我应该使用Container和Align吗?

在背景图像上排列定位徽标

我想创建一个可滚动的堆叠列表项,每个项都朝向屏幕

运行调试flutter应用程序时出错:B/BL超出范围(最大+/-128MB)到'';

当 Dart SDK 版本范围不匹配时,为什么依赖解析器不会抛出错误?

如何在Flutter中的textField中在可编辑文本和前缀图标之间添加空格?

点击按钮后重新启动定时器

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

Flutter:如何从运行时创建的列表中访问单个子部件的值

Flutter RIverpod 奇怪地改变状态

如何在 GridView.builder 中设置 textform 字段并在 flutter 中将 12 个 textformfield 作为单个字符串获取?

如何将 chrome web 模拟器添加到 vs code

应用程序和应用程序内的 webview 之间的单点登录

gridview 的所有按钮都应该在Flutter 中适合其父容器

我的主屏幕上的 FutureBuilder 不断重新加载(但仅在其他屏幕上时)?

如何在 Flutter 中创建类似箭头标签的设计