Flutter中的Widget可以分为两种类型:有状态的和无状态的。
1. 无状态的Widget(StatelessWidget)
无状态的Widget是一种不可变的小部件,一旦创建就不能更改其配置。它通常用于表示静态内容或与用户交互较少的部分。无状态的Widget通过继承StatelessWidget类实现。
class MyTextWidget extends StatelessWidget {
final String text;
MyTextWidget(this.text);
@override
Widget build(BuildContext context) {
return Text(text);
}
}
2. 有状态的Widget(StatefulWidget)
有状态的Widget是一种可变的小部件,可以在运行时更改其配置。它通常用于表示用户交互、动画或其他需要随时间变化的部分。有状态的Widget通过继承StatefulWidget和State类实现。
class MyCounterWidget extends StatefulWidget {
@override
_MyCounterWidgetState createState() => _MyCounterWidgetState();
}
class _MyCounterWidgetState extends State<MyCounterWidget> {
int count = 0;
void incrementCounter() {
setState(() {
count++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter: $count'),
RaisedButton(
onPressed: incrementCounter,
child: Text('Increment'),
),
],
);
}
}
Widget生命周期
有状态的Widget具有生命周期,它在被创建、插入到树中、更新和从树中删除时会调用不同的生命周期方法。这些生命周期方法包括:
- createState():创建相关的State对象。
- initState():初始化State对象,通常用于获取数据或订阅事件。
- build():构建并返回Widget树。
- didUpdateWidget():当父级重建时调用,可以比较旧的和新的配置。
- setState():请求框架重新构建Widget。
- dispose():销毁State对象,通常用于取消数据订阅或清理资源。
Widget树
在Flutter中,整个用户界面都是由小部件树构建的。Widget树是从根Widget开始,递归包含许多子Widget。当状态发生变化时,Flutter框架会重新构建Widget树,使UI保持同步。
void main() {
runApp(
MaterialApp(
home: MyCounterWidget(),
),
);
}
在这个例子中,MyCounterWidget是根Widget,它包含一个Column小部件,该小部件又包含Text和RaisedButton等子部件。当用户点击按钮时,setState被调用,触发build方法重新构建UI。
Widget框架的这种声明式、反应式的设计使得构建复杂UI变得直观且易于维护。同时,Flutter还提供了许多内置小部件和布局小部件,以便更轻松地构建丰富和灵活的用户界面。
转载请注明出处:http://www.zyzy.cn/article/detail/9587/Flutter