在Flutter渲染的流程中有三颗重要的树:Widget树、Element树、Render树。FlutterEnginer针对Render树进行渲染,Render树中的类都是RenderObject子类,只有继承RenderObjectWidget的类才会创建RenderObject对象。
-
Widget调用完构造方法,隐式调用createElement方法,Element会加入Element树中,起到一个管理的作用,会创建三种Element:
1、StatelessWidget创建
StatelessElement(extends ComponentElement),接着调用mount方法,一步一步到调用widget的build方法。Element持有Widget。2、StatefulWidget创建
StatefulElement(extends ComponentElement),构造StatefulElement时,调用widget的createState方法,并持有State,同时让State持有Widget,接着调用mount方法,一步一步到调用State的build方法。3、RenderObjectWidget创建
RenderObjectElement(extends Element),Element持有Widget,接着调用mount方法(The framework calls this function when a newly created element is added to the tree for the first time。),在mount方法里调用Widget的createRenderObject方法,将生成的RenderObject对象给Element管理,最后将RenderObject加入Render树。