Flutter State 的生命周期
Flutter 中 State 的生命周期是理解 StatefulWidget 工作原理的关键。以下是 Flutter 中 State 对象的完整生命周期:
createState()
- 当框架被要求构建 StatefulWidget 时首先调用
- 必须被覆盖并返回 State 类的实例
initState()
- 在 State 对象插入视图树时调用
- 仅被调用一次
- 这里适合进行一次性初始化,如控制器初始化、监听器注册等
- 必须调用 super.initState()
didChangeDependencies()
- 在 initState() 之后立即调用
- 当 State 对象的依赖项更改时会再次调用
- 例如,当使用 InheritedWidget (如 Theme 或 MediaQuery) 时,此方法会被调用
build()
- 必须实现的方法
- 描述如何构建组件的 UI
- 可能被频繁调用,所以应该是轻量级的
- 每当 widget 需要重新渲染时会调用
didUpdateWidget(covariant oldWidget)
- 当父 widget 重建并提供新 widget 时调用
- widget 的配置发生变化时使用
- 旧的 widget 作为参数传入
setState()
- 通知框架 State 对象的内部状态已更改
- 触发 build() 方法重新调用
- 不是生命周期方法,但用于管理状态变化
deactivate()
- 当 State 从视图树中移除时调用
- 如果稍后将其重新插入,可能还会再次激活
- 在从一个位置移动到另一个位置的情况下使用
dispose()
- 当 State 对象永久从视图树中移除时调用
- 用于清理资源,如取消订阅、销毁控制器等
- 必须调用 super.dispose()
这些方法构成了 Flutter 中 State 的完整生命周期。正确理解和使用这些生命周期方法对于创建高效、无内存泄漏的 Flutter 应用非常重要。