Appearance
flutter-lifecycle-observer
1. 实验目标
用最小 Flutter 页面验证:
initStatedidChangeDependenciesbuilddeactivatedisposeWidgetsBindingObserver.didChangeAppLifecycleState
并观察:
- 页面 push / pop 时组件生命周期如何变化
- App 前后台切换时
AppLifecycleState如何变化 build高频触发,但initState/dispose不是一一对应的
2. 工程要点
StatefulWidget负责页面级状态WidgetsBindingObserver负责监听 App 前后台事件- 页面内维护事件日志,便于静态阅读与运行时对照
- 提供“打开详情页”入口,观察父子页面的创建与销毁顺序
3. 运行方式
bash
cd labs/flutter/host
flutter run -d macos
# 或
flutter run -d ios
# 或
flutter run -d android启动后在首页进入 Flutter Lifecycle Observer。
4. 预期现象
- 首次进入页面:先
initState,再didChangeDependencies,再build - 点击“打开详情页”:当前页可能
deactivate,新页执行自己的initState/build - 从详情页返回:详情页
dispose,上一页再次build - App 退后台/回前台:日志追加
AppLifecycleState.paused/resumed
5. 常见误区
| 误区 | 实际情况 |
|---|---|
build 只会执行一次 | 错。依赖变化、父组件重建、返回页面都可能再次执行 |
dispose 一定紧跟 deactivate | 不一定。元素树调整时可能先 deactivate,未必立刻销毁 |
| Flutter 页面生命周期等同 Android Activity 生命周期 | 不等同。Flutter 还有 Widget / Element 层的重建与销毁 |
6. 对应知识库文档
- 理论主文档:Flutter 生命周期总览