用途
该技能用于设计或审查 Flutter 应用中的状态管理,包括状态归属、更新流程以及状态管理包的集成。它适用于 setState、Listenable、Provider、Riverpod、Bloc、Redux 或自定义状态方案等场景。
主要能力
技能的核心思路是:先确定状态的归属与生命周期,再选择具体机制。
在检查阶段,需要识别哪些状态属于临时 UI 状态、功能状态、共享应用状态、缓存的服务端数据或持久化数据,并确定谁创建、修改、观察和销毁这些状态。
技能列出的规则包括:
- 将状态保持在消费者允许的局部范围内。
- 维护单一数据源,派生次要值,而不是同步多份副本。
- 使状态转换显式化,并将副作用保持在 widget 的 build 方法之外。
- 当已有包及其约定正常工作时,予以保留。
- 对于新项目,依据复杂度、团队熟悉度、可测试性、对代码生成的容忍度以及生命周期需求来选择,而不是仅凭流行度。
- 暴露不可变状态或可变集合的只读视图。
- 在 UI 需要区分时,刻意建模加载、空、成功和失败状态。
- 避免宽泛订阅导致无关子树重建。
- 仅在 build 或其他 watch 安全的方法中使用包的 watch 式访问器(如 ref.watch、context.watch<T>()、BlocBuilder),在回调和事件处理器中使用一次性访问器(如 ref.read、context.read<T>()、Bloc 的 add)。在大多数包中,从回调调用 watch 式访问器会抛出异常或行为异常。
- 不要为了掩盖不清晰的归属关系而引入全局服务定位器或包级单例。
使用方式
该技能以设计或审查任务的形式使用,围绕状态归属、更新流程和包集成展开。资料未提供具体的安装命令或代码示例。
验证
技能建议测试有意义的转换、失败恢复、销毁和重复事件;检查热路径的重建范围,并运行 widget 测试以验证状态到 UI 的行为。
适用场景与边界
该技能聚焦于状态管理本身。架构层面的依赖方向属于 flutter-architecture 的范畴;持久化和远程缓存属于各自的数据专家范畴。当涉及销毁行为或生命周期泄漏时,应参考生命周期与销毁相关参考;对于异步状态建模和错误恢复,应参考异步状态模式相关参考。
限制
资料未提供该技能的具体安装方式、支持平台、收费信息或使用步骤。