Skip to content

flutter-lifecycle-observer

1. 实验目标

用最小 Flutter 页面验证:

  • initState
  • didChangeDependencies
  • build
  • deactivate
  • dispose
  • WidgetsBindingObserver.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. 对应知识库文档

7. 关键源码