1. 前言
在本系列文章的前面三篇文章中,已经分别介绍Flutter的三种核心元素:Widget,Element,和RenderObject。并介绍了它们之间的关系。在这篇文章中,将在前面文章的基础上,对Flutter中非常出名的概念“Widget,Element,RenderObject树”进行剖析,以此加深读者对Flutter Framework的理解。
2. Widget,Element,RenderObject树的概念和作用
学习Flutter的时候经常会遇到一个概念:Widget,Element,RenderObject树。那什么是Widget,Element,RenderObject树呢?Flutter中的Widget,Element,RenderObject树指的是:Widget Tree, Element Tree, RenderObject Tree。从前面几篇文章可以知道,它们的作用分别如下:
- Widget Tree
Widget Tree是整个UI界面的配置,Flutter开发者通过Widget Tree告诉Framework想要绘制的UI界面是什么样的,这棵树是我们主要打交道的对象。 - Element Tree
Element Tree是通过Widget Tree生成的,其主要作用是维护UI元素的树形结构,并将Widget和RenderObject关联到树上。 - RenderObject Tree
RenderObject Tree也是通过Widget Tree生成的,其主要作用是负责界面的绘制和布局,是属于底层系统,Flutter开发者一般不需要直接操作该树。
为了加深对这Widget,Element,RenderObject树的理解,下面将使用一个例子进行讲解。
3. Widget,Element,RenderObject树示例
示例代码如下:
class TreeTest extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text("tree test", textDirection: TextDirection.ltr)
);
}
}
该示例很简单,在页面中间显示一个Text,文案为tree test。其运