用途:在 Flutter 应用中管理应用状态与短暂状态,适用于在 Widget 之间共享数据或处理复杂 UI 状态转换的场景。
核心概念:Flutter 的 UI 是声明式的(UI = f(state)),状态变化时需触发依赖该状态的 UI 重建。状态分两类:短暂状态(本地状态)限于单个 Widget,如 PageView 当前页、选中标签、动画进度,用 StatefulWidget 与 setState() 管理;应用状态(共享状态)跨多个部分共享并跨用户会话保留,如用户偏好、登录信息、购物车内容,用 InheritedWidget、provider 包与 MVVM 架构管理。
架构与数据流:推荐 MVVM 结合单向数据流(UDF),状态从数据层经逻辑层流向 UI 层,用户交互事件反向向上流动。单一数据源(SSOT)要求数据变更只发生在数据层 Repository。Model 用 Repository 类处理 HTTP 请求、缓存与系统资源;ViewModel 扩展 ChangeNotifier,把应用数据转为 UI 状态,数据变化时调用 notifyListeners() 触发重建;View 展示 ViewModel 提供的状态,应保持精简,仅含路由、动画或简单 UI 条件判断。
选择方案:单 Widget 范围用 StatefulWidget 与 State,把可变状态存为私有字段,仅在 setState() 回调内修改状态以标记 Widget 为脏并安排重建;跨 Widget 共享时实现 MVVM,用 provider 包(InheritedWidget 的封装)把状态注入 Widget 树,用 ChangeNotifier 发出状态更新。
使用方式(MVVM + Provider 工作流):1. 定义 Model(Repository)作为该数据域的 SSOT;2. 创建继承 ChangeNotifier 的 ViewModel,经依赖注入传入 Repository,定义 isLoading、data、errorMessage 等 UI 状态属性,在事件方法内修改状态并调用 notifyListeners();3. 用 ChangeNotifierProvider 注入 ViewModel,尽量放在 Widget 树较低位置以缩小作用域;4. 在 View 中用 Consumer<MyViewModel> 重建特定 UI 部分,在事件处理器(如 onPressed)中用 context.read<MyViewModel>() 或 Provider.of<MyViewModel>(context, listen: false) 调用方法而不触发调用方重建;5. 验证:触发用户操作,确认 ViewModel 收到事件并调用 Repository、Repository 更新 SSOT 并返回数据、ViewModel 更新状态并调用 notifyListeners()、View 以新状态重建,再通过 validator 检查并修复缺失的 notifyListeners() 调用或错误的 Provider 作用域。
限制:资料未提供该技能的安装命令、版本要求、价格、平台支持或效果数据,暂未提供。