Flutter 状态管理的选择之路

起点:Provider

刚接触 Flutter 的时候,Provider 几乎是官方推荐的默认选择。简单的 ChangeNotifier 加上 Consumer,对于小型项目来说完全够用。

class Counter extends ChangeNotifier {
  int _count = 0;
  int get count => _count;
  void increment() { _count++; notifyListeners(); }
}

但随着项目规模增长,问题开始浮现:

  1. 依赖顺序难以管理 — 当 10 个 Provider 互相依赖时,MultiProvider 的嵌套让人头疼
  2. 粒度控制粗糙notifyListeners() 会触发所有 Consumer 重建
  3. 测试友好度一般 — 需要额外的 mock 工作

转向 BLoC

在接手一个大型商业项目后,团队决定统一使用 BLoC 模式。最大的感受是:

  • 结构清晰 — Event → Bloc → State 的单向数据流,任何人看代码都能快速理解
  • 可测试性极好 — 输入 event,断言 state 序列,非常直观
  • 但模板代码多 — 一个简单的计数器也要写 3 个文件

现在的选择

目前我更倾向于 Riverpod

  • 编译时安全,没有运行时 ProviderNotFoundException
  • ref.watch / ref.read 的 API 设计清晰
  • 自动处理 dispose
  • 对测试友好

选择什么状态管理方案,最终取决于团队规模和项目复杂度。小型项目用 Provider 依然是好选择。

你怎么看?欢迎通过 联系页面 和我讨论!