A.Flutter Tree (Flutter包含三种树)
A1.Widget:
存放渲染内容、视图布局信息,widget 的属性最好都是 immutable
A2.Element:
存放上下文,通过 Element 遍历视图树,Element 同时持有 Widget 和 RenderObject
A3.RenderObject
根据 Widget 的布局属性进行 「布局(layout)」、「绘制( paint)」出Widget 传入的内容
下面通过画的图来了解一下:
这个3棵树的关系是Futter在构建的时候首先会创建Widget这个棵树,然后通过WidgetTreeRoot构建ElementTree,再更具ElmentTreeRoot构建RenderTree.RendetTree就会把最终的显示效果展现给大家。
1.所有的Widget 最终都会被ComponentElment持有,而ComponentElment最终都实现了BuildContext.也就是说Elment就是BuildContext.
2.StatelessWidget和StatefulWidget本质上一样的都是@immutable的之所以StatefulWidget本称做有状态变化是因为StatefulWidget继承了State,用于记录StatefulWidget会变化的状态,并且根据状态的变化,构建出新的Widget。
3.
网友评论