4.1 布局简介

布局类组件都会包含一个或者多个子组件,不同的布局类组件对子组件的排列方式不同,排版最终会通过Element树才是最终的绘制树,Element是通过Widget.createElement创建的,WidgetElement的配置数据,在Flutter中,根据Widget是否需要包含子节点将Widget分为三类,如下:

Widget Element 用途
LeafRenderObjectWidget LeafRenderObjectElement Widget的叶子节点(叶子就是没有孩子的节点),一般用于基础组件如Image、
SingleChildRenderObjectWidget SingleChildRenderObjectElement 包含一个子组件,如:Container,Align...
MultiChildRenderObjectWidget MultiChildRenderObjectElement 包含一个或多个子组件,如:Row,Column,Stack...

b布局类组件就是指直接或者间接(包含)MutiChildRenderObjectWidget的Widget,他们一般有child属性用来接收子组件,Widget>RenderObjectWidget>(Leaf/SingleChild/MutiChild)RenderObjectWidget

RenderObjectWidget类定义了创建、更新RenderObject的方法,子类必须实现他们,关于RenderObject我们现在只需要知道他是最终布局,渲染UI界面即可,也就是说,布局类算法都是通过RenderObject对象来实现的,所以读者接下来对布局类组件原理感兴趣可以自行查看RenderObject的实现。

results matching ""

    No results matching ""