用途:为 Flutter 应用选择并实现合适的状态管理方案,依据状态范围、复杂度与可测试性进行判断。
主要能力:给出决策树——局部/仅 UI 状态(开关、动画、表单字段)用 setState;子树内少量控件共享的简单状态用 InheritedWidget 或 ValueNotifier,中等复杂度用 Provider/ChangeNotifier;应用级状态(登录、主题、用户偏好)小应用用 Provider、中大型用 Riverpod;复杂异步流程(分页、搜索、实时数据)偏好声明式/响应式选 Riverpod,偏好事件驱动与严格模式选 BLoC;需要离线优先或复杂同步可选 BLoC 或 Riverpod 配合 Repository 模式。
文中示例涵盖:setState 的 LikeButton;Provider 的 ChangeNotifier 模型、MultiProvider/ProxyProvider 配置,以及 read、watch、select、Consumer 用法;Riverpod 的 Provider、StateProvider、FutureProvider.family、StreamProvider、NotifierProvider、Notifier/AsyncNotifier 模式与 ConsumerWidget 中 when 处理加载/错误/数据,以及依赖与 override 测试;BLoC 的 sealed 事件与状态类、AuthBloc 事件处理、BlocProvider、BlocBuilder、BlocListener 与 blocTest 测试。
限制与反模式:简单状态不必用 BLoC;局部关注点不应放入全局状态;ChangeNotifier 中不可原地修改集合而不通知;状态管理属纯逻辑,应写测试。