Widget的渲染原理

252 阅读1分钟

在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树。