起点:Provider
刚接触 Flutter 的时候,Provider 几乎是官方推荐的默认选择。简单的 ChangeNotifier 加上 Consumer,对于小型项目来说完全够用。
class Counter extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() { _count++; notifyListeners(); }
}
但随着项目规模增长,问题开始浮现:
- 依赖顺序难以管理 — 当 10 个 Provider 互相依赖时,
MultiProvider的嵌套让人头疼 - 粒度控制粗糙 —
notifyListeners()会触发所有Consumer重建 - 测试友好度一般 — 需要额外的 mock 工作
转向 BLoC
在接手一个大型商业项目后,团队决定统一使用 BLoC 模式。最大的感受是:
- 结构清晰 — Event → Bloc → State 的单向数据流,任何人看代码都能快速理解
- 可测试性极好 — 输入 event,断言 state 序列,非常直观
- 但模板代码多 — 一个简单的计数器也要写 3 个文件
现在的选择
目前我更倾向于 Riverpod:
- 编译时安全,没有运行时 ProviderNotFoundException
ref.watch/ref.read的 API 设计清晰- 自动处理 dispose
- 对测试友好
选择什么状态管理方案,最终取决于团队规模和项目复杂度。小型项目用 Provider 依然是好选择。
你怎么看?欢迎通过 联系页面 和我讨论!