StatefulWidget 完整生命周期(8阶段)
easyflutterstatefulwidgetlifecyclecreatestateinitstatedispose
StatefulWidget 的完整生命周期详见「02-flutter-核心机制/03-widget-lifecycle」。
本章作为状态管理视角的简要回顾,重点关注状态初始化、依赖获取、资源释放在生命周期中的最佳时机。
最佳实践小结
initState() → 初始化控制器、订阅(不能访问 InheritedWidget)
didChangeDependencies() → 首次依赖 context(Provider/Theme),加 _initialized 守卫
build() → 纯 UI,无副作用
didUpdateWidget()→ 响应父传参变化,取消旧订阅/建立新订阅
setState() → 修改状态触发 rebuild,async 后用 mounted 守卫
dispose() → 释放所有资源(Controller、Subscription、FocusNode)
与状态管理结合的典型模式
class _MyPageState extends State<MyPage> {
// Provider 场景:在 initState 发送加载事件
@override
void initState() {
super.initState();
// ✅ Provider 的读取放 initState(不订阅,不触发 rebuild)
WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<DataBloc>().add(LoadDataEvent());
});
}
// Riverpod 场景:在 build 中 watch
@override
Widget build(BuildContext context) {
// 通过 ConsumerWidget / HookConsumerWidget 在 build 中用 ref.watch
return const SizedBox();
}
@override
void dispose() {
// 所有资源在这里释放
super.dispose();
}
}