Riverpod 架构笔记
flutter_riverpod 把状态提升为可测试的图结构,而不是散落在 Widget 树里。
核心概念
dart
@riverpod
Future<User> user(UserRef ref, String id) async {
return ref.watch(apiProvider).fetchUser(id);
}ref.watch 建立依赖;ref.listen 处理副作用;ref.read 仅用于一次性动作(如按钮 onPressed)。
与 Repository 分层
- Presentation: ConsumerWidget
- Application: Notifier / AsyncNotifier
- Data: Repository + DataSource
测试时用 ProviderContainer(overrides: [...]) 注入假实现,无需 pump 整棵 Widget 树。
反模式
全局 read 触发刷新却不 watch,导致 UI 不更新;在 build 里 read 网络请求。
Riverpod 强迫你把数据流画清楚——这正是中大型 Flutter 项目需要的纪律。