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