Widgets概念
Flutter里有一个非常重要的核心理念:一切皆为组件,Flutter的所有元素都是由控件构成的。 与原生开发中控件所代表的含义不同,Flutter中widget的概念更加广泛,它不仅可以表示UI元素,也可以表示一些功能性的组件,如用于手势检测的 GestureDetector widget、用于应用主题数据传递的Theme等等。而原生开发中的控件通常只是指UI元素。由于Flutter主要就是用于构建用户界面的,所以,在大多数时候,我们可以简单的认为widget就是一个控件,不必纠结于概念。
Widget与Element在正式介绍Flutter的Widget之前,我们需要理清两个概念,即什么是Widget,什么是Element?
Widget的功能是“描述一个UI元素的配置数据,它就是说,Widget其实并不是表示最终绘制在设备屏幕上的显示元素,而只是显示元素的一个配置数据。实际上,Flutter中真正代表屏幕上显示元素的类是Element,也就是说Widget只是描述Element的一个配置。并且一个Widget可以对应多个Element,这是因为同一个Widget对象可以被添加到UI树的不同部分,而真正渲染时,UI树的每一个Widget节点都会对应一个Element对象。所以,理解Flutter的Widget需要理清两个概念:
- Widget实际上就是Element的配置数据, Widget的功能是描述一个UI元素的一个配置数据, 而真正的UI渲染是由Element构成的。
- 由于Element是通过Widget生成,所以它们之间有对应关系,所以在大多数场景&