Flutter 组件分析之IgnorePointer
本系列教程基于Flutter widget, 意在为Flutter 入门提供基础建设. 重点在讲解widget 的 用法,参数以及扩展.
适宜人群: 入门
引子
在 Flutter 组件分析之AbsorbPointer 一文中, 我们分析了关于手势事件的传递和处理, 并且我们知道了 AbsorbPointer 是手势拦截的 widget 之一. 除此之外, 还有哪些 widget 可以拦截手势呢? IgnorePointer 便是这样的组件, 它同样用于手势的拦截, 本身可以忽略手势的命中. 它与 AbsorbPointer 的区别在于: IgnorePointer 自身不会去参与命中测试, 但是 AbsorbPointer 自身会参与手势命中测试.
IgnorePointer
IgnorePointer 的参数由 key、ignoring、child、ignoringSemantics 构成.
其中, ignoringSemantics 将会决定是否忽略当前节点的语义. ignoring 决定了是否忽略当前手势事件. 它与 AbsorbPointer 一样都提供了 updateRenderObject、createRenderObject 方法,
RenderIgnorePointer
在 createRenderObject 中, 生成了 RenderIgnorePointer , 这里主要处理手势、ui 相关的东西. 我们可以首先关注在 RenderIgnorePointer hitTest 方法中, 这里处理着手势相关的事件. 可以看到, 在 ignoring 等于 true 的时候, 即使我们命中了当前的 widget ,依然会返回 false . 由于手势自上而下传递的特性, 因此下层也接收不到手势. 当为 true 的时候, 就会正常的走手势下发的流程.
思考
通过 IgnorePointer、AbsorbPointer , 我们已经可以处理或者不处理手势事件且拦截手势下发. 二者的核心部分还是在于 hitTest 的运用. 由此, 我们也可以做一些自己的定制化处理. 例如, 只让widget 一半的部分处理手势, 另一半不处理手势. 这样我们可以更精准化的管理手势, 实际上读源码的目的还是在于扩展、学习. 但是了解 widget 的前提, 我想更是对深层次的源码挖掘. 比如说引发对手势传递源码的思路以及为什么这样设计? 希望大家都有所收获吧👋
这里是WeninerIo😇
如果你对这次的技术分享感兴趣或者有什么疑惑🧐
不妨在评论区留言或私信🤪
或许这次的分享不是你所期待的😣
那就点个关注吧! 🙏
下次也许就是你中意的呢🫣?