void attachRootWidget(Widget rootWidget) {
_readyToProduceFrames = true;
// 创建RenderObjectToWidgetAdapter,RenderObjectToWidgetAdapter是RenderObjectElement和Element的桥梁。
// 第一步
_renderViewElement = RenderObjectToWidgetAdapter(
container: renderView,
debugShortDescription: ‘[root]’,
child: rootWidget,
//第二部
).attachToRenderTree(buildOwner!, renderViewElement as RenderObjectToWidgetElement?);
}
attachRootWidget方法很简单,主要分为两步:
-
创建RenderObjectToWidgetAdapter
-
调用RenderObjectToWidgetAdapter的attachToRenderTree方法
很明显核心逻辑都在RenderObjectToWidgetAdapter
,RenderObjectToWidgetAdapter
,其实也是一个widget,初始化的时候将rootWidget传递过去,作为child,还有个参数就是renderView,实际上是一个RenderObject。而RenderObjectToWidgetAdapter
作为一个adapter的主要作用就是建立RenderObject,Element,Widget之间的桥梁。
RenderView