SuperAPI AI 工具集

riverpod

编程与开发

查看项目

更新于 10-15 19:56

技能介绍

用途:在 Flutter 应用中使用 Riverpod(riverpod、flutter_riverpod)构建状态管理时参考。

核心约定:Provider 用于只读值与依赖装配;StateProvider 用于小的可变状态;FutureProvider 用于一次性异步加载;StreamProvider 用于响应式流;Notifier 或 AsyncNotifier 用于需要变更方法的业务状态;autoDispose 用于短生命周期状态;family 用于依赖参数的 provider。Flutter 应用使用 flutter_riverpod,通常不必再单独添加 riverpod(会传递引入)。当前稳定线为 Riverpod 3.x(riverpod 3.2.1、flutter_riverpod 3.3.1)。

项目设置:纯 Dart 添加 riverpod;Flutter UI 添加 flutter_riverpod,用 ProviderScope 包裹应用,在需要 ref 处使用 ConsumerWidget、Consumer 或 ConsumerStatefulWidget。使用代码生成时添加 riverpod_annotation、riverpod_generator、build_runner。

实现:provider 持有状态与依赖,仓库与 API 放在 widget 外;UI 用 ref.watch 读取、ref.read 执行命令式读取;容器级 override 用于测试与不同环境装配。

生命周期与绑定:autoDispose 用于短暂页面与瞬时查询,ref.keepAlive() 仅在需要临时保留缓存时使用;测试与纯 Dart 代码结束后销毁 ProviderContainer。用 select 减少重建,用 ProviderListener 或 ref.listen 处理副作用。

测试:通过 ProviderContainer 测试 provider,用 override 替换依赖而非 mock provider 内部,异步 provider 直接断言 AsyncValue 状态,测试后销毁容器。

常见问题:回调中不要用 ref.watch(用 ref.read);不要漏掉根级 ProviderScope;不要用 StateProvider 承载大型业务状态;不要把业务逻辑放进 widget;单字段变化不要重建整棵树;能用 FutureProvider 或 AsyncNotifier 时不要手写异步加载;不要忘记测试与预览的 provider override。

限制:以上为技能说明范围,具体版本兼容与迁移细节暂未提供。