runApp

runApp(widget) 是 Flutter 应用的入口,用于加载给定的 widget,并将其加载到 屏幕 上
notion image
notion image
  • runApp(widget) 的函数定义如下:
    • 可以看到,其实就是调用了 WidgetsFlutterBinding 里面的方法,下面分别从源码处看 WidgetsFlutterBinding 类、ensureInitialized()、scheduleAttachRootWidget(app)、..scheduleWarmUpFrame() 的定义及作用

WidgetsFlutterBinding

  • 从类声明上可以看到,这是一个将 Flutter framework 与 Flutter engine 绑定到一起的类,所以继承了 七个 XXXBinding 类

ensureInitialized()

scheduleAttachRootWidget(app)

  • 可以看到,ensureInitialized() 返回值是 WidgetsBinding 类型,而 scheduleAttachRootWidget(app) 就是该类的一个方法,所以下面来看看 WidgetsBinding
    • 接着很顺利地来到 WidgetsBinding 中看看 scheduleAttachRootWidget() 的定义:
      • 接着往下看,attachRootWidget(widget) 到底干了什么
        • 可以看到,attachRootWidget(widget) 内部其实是调用了 attachToRenderTree(),将 WidgetTree (RenderObjectToWidgetAdapter)、ElementTree (renderViewElement)、RenderTree (renderView) 联系并建立起来

        scheduleWarmUpFrame

        三棵树的关系

        • WidgetTree
        • ElementTree
        • RenderTree
        notion image
        notion image

        引用/参考

         
        Flutter 基础知识必备Leetcode_Offer_II_010-和为k的子数组