在 Flutter 中,Widget 对象从创建到销毁通常会经历哪些生命周期阶段?请分别说明各阶段的主要特征和触发时机。
考察说明
考查对 Flutter Widget 生命周期机制的理解,包括创建、重建和销毁过程。
回答思路
- 【回答框架 1】Widget 是 Flutter UI 的不可变配置,生命周期主要研究 State 对象。State 生命周期由 StatefulWidget 驱动,核心阶段包括:createState、initState、didChangeDependencies、build、didUpdateWidget、deactivate、dispose。
- 【回答框架 2】initState 在 State 创建后只调用一次,用于初始化数据或注册监听;didChangeDependencies 在依赖的 InheritedWidget 变化或首次 build 前调用,适合做依赖相关初始化。
- 【回答框架 3】build 在每次需要渲染时调用,是生命周期中调用最频繁的阶段;didUpdateWidget 在父 Widget 重建导致当前 Widget 配置变化时触发,可在此响应 widget 属性变化。
- 【回答框架 4】deactivate 在 State 从树中移除时调用,可做短暂恢复;dispose 在 State 永久销毁前调用,用于释放资源、取消订阅,之后 State 不可复用。
- 【回答框架 5】整个生命周期确保 State 资源与界面同步:正确释放控制器、动画和流监听,避免内存泄漏。
- 【关键点 1】State 生命周期包含 initState、didChangeDependencies、build、didUpdateWidget、deactivate、dispose 六个核心阶段
- 【关键点 2】initState 仅执行一次,适合初始化数据;dispose 必须释放资源
- 【关键点 3】didUpdateWidget 在父组件更新导致 widget 配置变化时触发,可对比旧 widget
- 【关键点 4】deactivate 后可能重新插入树,dispose 后不可复用
- 【易错点 1】不要在 initState 中调用 BuildContext 的依赖项方法,如 inheritedWidget 的依赖获取应在 didChangeDependencies 中
- 【易错点 2】不要遗漏 dispose 中流、控制器等资源的释放,会导致内存泄漏
- 【易错点 3】避免在 build 中执行耗时操作,影响帧率