Widget 相当于 UIView
1. widgets拥有不同的生存时间:
- 一直存在且保持不变,直到需要被改变。
- 当 widgets 和它们的状态被改变时,Flutter 会构建一颗新的 widgets 树。
iOS 中的 views 在改变时并不会被重新创建。
- 但是与其说 views 是可变的实例,不如说它们被绘制了一次,
- 直到使用 setNeedsDisplay() 之后才会被重新绘制。
2. 由于不可变性,Flutter 的 widgets 非常轻量。
- 这是因为它们本身并不是什么控件,也不会被直接绘制出什么,而只是 UI 的描述。
Material 组件库
Flutter 包含了 Material 组件库。这些 widgets 遵循了 Material 设计规范。
在 iOS 平台,可以使用 Cupertino widgets 来构建遵循了 Apple’s iOS design language 的界面。
在 Flutter 中,widgets 是不可变的,而且不能被直接更新。需要去操纵 widget 的 state
- 无状态(StatelessWidget), 初始化后不再进行改变的界面
- 有状态(StatefulWidget), 界面需要更新
StatefulWidget 拥有一个 State 对象来存储它的状态数据, 在 widget 树重建时携带着它
一个 widget 是有状态的,包含它的父亲 widget 也可以是无状态的,只要父 widget 本身不响应这些变化。
- 示例
// StatelessWidget
Text(
'I like Flutter!',
style: TextStyle(fontWeight: FontWeight.bold),
);