Flutter 中 Widget 的生命周期分为两大类:StatefulWidget 和 StatelessWidget。
- StatelessWidget 生命周期
Dart
class MyStatelessWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container();
}
}
- StatefulWidget 完整生命周期
生命周期方法执行顺序
创建阶段 → 更新阶段 → 销毁阶段
创建阶段
Dart
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
// 1. 构造函数
_MyStatefulWidgetState() {
print('1. 构造函数调用');
}
// 2. initState - 最重要的初始化方法
@override
void initState() {
super.initState();
print('2. initState调用');
}
// 3. didChangeDependencies - 依赖变化时调用
@override
void didChangeDependencies() {
super.didChangeDependencies();
print('3. didChangeDependencies调用');
// 用途:处理InheritedWidget依赖变化
// 在initState之后立即调用,也可能在依赖变化时调用
}
// 4. build - 构建UI
@override
Widget build(BuildContext context) {
print('4. build调用');
return Container();
}
// 5. didUpdateWidget - Widget配置更新时调用
@override
void didUpdateWidget(covariant MyStatefulWidget oldWidget) {
super.didUpdateWidget(oldWidget);
print('5. didUpdateWidget调用');
}
}
更新阶段
触发更新的方式
Dart
// 方式1: setState
setState(() {
_counter++;
});
// 方式2: 父组件重建传入新props
ParentWidget → MyStatefulWidget(newProps)
// 方式3: InheritedWidget数据变化
更新时的调用顺序
Dart
didUpdateWidget() → build()
销毁阶段
Dart
// 6. deactivate - 从树中移除时调用
@override
void deactivate() {
print('6. deactivate调用');
super.deactivate();
// 用途:临时移除时的清理工作
}
// 7. dispose - 永久销毁时调用
@override
void dispose() {
print('7. dispose调用');
// 用途:释放资源、取消订阅、停止动画
super.dispose();
}
}
完整的生命周期流程图
Dart
创建阶段:
构造函数 → initState() → didChangeDependencies() → build()
更新阶段:
setState() 或 props变化 → didUpdateWidget() → build()
销毁阶段:
deactivate() → dispose()
