Flutter手势识别

作者: 廖布斯M | 来源:发表于2020-04-12 13:33 被阅读0次

1:触摸事件来源

GestureBinding

2:对事件感兴趣

对PointerDownEvent进行处理,找出对后续事件感兴趣的target。

RenderBinding类方法

依次RenderObject的hitTest方法。

RenderView类方法

若是对于该事件感兴趣,则将其加入HitTestResult。也调用children的hitTest方法。

3:手势识别

手势识别的基础类是Listener。我们主要关心Listener Widget所对应的RenderObject对象。

RenderProxyBoxWithHitTestBehavior类

主要逻辑就是,先检测手指的触摸点是否在该RenderObject范围类。若是则测试children是否关心该事件。(HitTestBehavior的三种类型见文档)

RawGestureDetector

RawGestureDetector类使用了Listener,看源码可见,该类只关心pointer down 事件。

RawGestureDetector

下面进入手势识别的核心逻辑,为了简单起见,我们以tap手势为例。

GestureRecognizer PrimaryPointerGestureRecognizer OneSequenceGestureRecognizer

到此可见,GestureRecognizer最终会像GestureBinding注册一个handleEvent回调。

我们在此梳理一下,RawGestureDetector对down事件感兴趣,表示对后续事件也感兴趣,借助GestureRecognizer,往GestureBinding注册了handleEvent回调。handleEvent会对后续的move ,up等事件进行处理。

下一个问题是,GestureBinding如何分发后续事件。

GestureBinding PointerRouter

GestureBinding的handleEvent,将后续事件分发给了,之前在GestureRecognizer的addAllowedPointer中添加的Router。

相关文章

网友评论

    本文标题:Flutter手势识别

    本文链接:https://www.haomeiwen.com/subject/nwuvmhtx.html