1:触摸事件来源
GestureBinding2:对事件感兴趣
对PointerDownEvent进行处理,找出对后续事件感兴趣的target。
RenderBinding类方法依次RenderObject的hitTest方法。
RenderView类方法若是对于该事件感兴趣,则将其加入HitTestResult。也调用children的hitTest方法。
3:手势识别
手势识别的基础类是Listener。我们主要关心Listener Widget所对应的RenderObject对象。
RenderProxyBoxWithHitTestBehavior类主要逻辑就是,先检测手指的触摸点是否在该RenderObject范围类。若是则测试children是否关心该事件。(HitTestBehavior的三种类型见文档)
RawGestureDetectorRawGestureDetector类使用了Listener,看源码可见,该类只关心pointer down 事件。
RawGestureDetector下面进入手势识别的核心逻辑,为了简单起见,我们以tap手势为例。
GestureRecognizer PrimaryPointerGestureRecognizer OneSequenceGestureRecognizer到此可见,GestureRecognizer最终会像GestureBinding注册一个handleEvent回调。
我们在此梳理一下,RawGestureDetector对down事件感兴趣,表示对后续事件也感兴趣,借助GestureRecognizer,往GestureBinding注册了handleEvent回调。handleEvent会对后续的move ,up等事件进行处理。
下一个问题是,GestureBinding如何分发后续事件。
GestureBinding PointerRouterGestureBinding的handleEvent,将后续事件分发给了,之前在GestureRecognizer的addAllowedPointer中添加的Router。
网友评论