return WidgetsBinding.instance!;
}
}
WidgetsFlutterBinding类继承自BindingBase并且混入[mixin]了很多其他Binding类,看名称都是绑定各种不同的功能;
BindingBase,上面的各个mixin Binding类都是继承自它,各个mixin类都重写了initInstances()方法,并且调用了super.initInstances(),所以他们所有的initInstans()方法都会被串行顺序执行。如果对mixin机制不是很理解可以先看看”小白都能看懂的关于Mixins机制的理解“。最终FlutterWidgetBinding()初始化的逻辑为:

WidgetsFlutterBinding经过mixin依赖,实现了所有的Binding类的功能,下面逐一大概介绍一下每个Binding的作用:
GestureBinding:提供了window.onPointerDataPacket的回调,绑定Fragmework子系统,是Framework事件模型与底层事件的绑定入口。
ServicesBinding:提供了window.onPlatformMessage回调,用于绑定平台消息通道(messagechannel),主要处理原生和Flutter之间的通信。
SchedulerBinding:提供了window.onBeginFrame和window.onDrawFrame回调,监听刷新事件,绑定Framework绘制调度子系统
PaintingBinding:绑定绘制库,主要用于处理图片缓存。
<
SematicsBinding:语义化层与Flutter engine的桥梁,主要是辅助功能的底层支持。

本文深入探讨了Flutter框架的入口函数runApp的源码,详细解析WidgetsFlutterBinding如何实现不同Binding功能,以及scheduleAttachRootWidget方法如何将根Widget添加到渲染树。此外,还介绍了热身帧绘制的过程,确保在绘制期间不受事件干扰。通过这篇文章,读者可以更好地理解Flutter的启动流程和移动应用开发的实践知识。
最低0.47元/天 解锁文章
2884

被折叠的 条评论
为什么被折叠?



