源码执行顺序看不懂的可以先看看这个 -> WidgetsFlutterBinding是怎样使用mixin的
Android端:
MainActivity
-> FlutterActivity //
-> createFlutterView()
-> FlutterView //重写onTouchEvent,获取手势事件
-> this.androidTouchProcessor.onTouchEvent(event) //将手势透传给AndroidTouchProcessor
-> addPointerForIndex() //组装数据
-> this.renderer.dispatchPointerDataPacket(packet, packet.position()) //FlutterRenderer 调用JNI方法将数据传递给Flutter层
-> this.flutterJNI.dispatchPointerDataPacket(buffer, position);
Flutter层:
-> hooks.dart: @pragma('vm:entry-point')_dispatchPointerDataPacket //被Native层调用
-> PlatformDispatcher.instance._dispatchPointerDataPacket(packet) //透传到PlatformDispatcher中_dispatchPointerDataPacket方法
-> onPointerDataPacket //回调函数
-> GestureBinding: platformDispatcher.onPointerDataPacket = _handlePointerDataPacket; //回调函数在GestureBinding中赋值
-> _handlePointerDataPacket()
->_pendingPointerEvents.addAll() //将组装的手势数据添加到进_pendingPointerEvents队列
-> _flushPointerEventQueue() //循环队列调用handlePointerEvent
-> handlePointerEvent()
->_handlePointerEventImmediately() //根据事件类型处理, 一般情况下: Down 事件用来记录,Up 事件用来结束,其他的事件做分发
->
记录事件
-> hitTestResult = HitTestResult(); //存放事件命中集合
-> hitTest(hitTestResult, event.position); //命中测试
-> RendererBinding.hitTest() //先执行RendererBinding的hitTest()方法 (为什么这么执行可以看开头的另一篇文章)
-> renderV