应用启动
Flutter的入口在"lib/main.dart"的main()函数中,它是Dart应用程序的起点。
void main() => runApp(MyApp());
查看runApp()方法
void runApp(Widget app) {
WidgetsFlutterBinding.ensureInitialized()
..scheduleAttachRootWidget(app)
..scheduleWarmUpFrame();
}
app是第一个组件,WidgetsFlutterBinding是绑定widget和Flutter引擎的桥梁。
WidgetsFlutterBinding
class WidgetsFlutterBinding extends BindingBase with GestureBinding, ServicesBinding, SchedulerBinding, PaintingBinding, SemanticsBinding, RendererBinding, WidgetsBinding {
static WidgetsBinding ensureInitialized() {
if (WidgetsBinding.instance == null)
WidgetsFlutterBinding();
return WidgetsBinding.instance;
}
}
WidgetsFlutterBinding继承BindingBase,并且引入很多Binding,通过各种Binding源码可以看出基本上都是监听并处理Window对象的一些事件。WidgetsFlutterBinding.ensureInitialized()负责初始化一个WidgetsBinding的全局单例,然后调用scheduleAttachRootWidget方法将根Widget添加到RenderView。
attachRootWidget
void scheduleAttachRootWidget(Widget rootWidget) {
Timer.run((