关于 riverpod-overrides
riverpod-overrides 是介绍如何通过容器级覆盖来更改 Riverpod Provider 行为的参考技能,适用于 Flutter 和 Dart。内容涵盖实现、值和构建覆盖,以及针对单个参数或整个 Provider family 的覆盖方式。
主要功能
- 01在 ProviderScope 或 ProviderContainer 设置覆盖
- 02使用实现、值和构建覆盖方法
- 03覆盖单个 family 参数或整个 family
- 04用于测试和不同环境
适用场景
- 01在测试中提供固定的 Provider 值
- 02调试时替换 Provider 行为
- 03为不同环境配置 Provider
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ serverpod/ skills-registry --skill riverpod-overrides安装后在 Claude Code 中输入/riverpod-overrides确认已加载。
详细介绍
Riverpod — Provider 覆盖
说明
所有 Provider 都可以被覆盖以更改其行为。通过 overrides 参数在容器上设置覆盖项(Flutter 中为 ProviderScope,Dart 中为 ProviderContainer)。可在测试、调试、不同环境或作用域限定时使用覆盖项(参见 riverpod-scoping)。
在何处设置覆盖项
- Flutter: 将
overrides传给ProviderScope(通常设在根节点或某个子树周围)。 - Dart: 将
overrides传给ProviderContainer。
覆盖方法
每种 Provider 类型都提供名称以 overrideWith 开头的方法,例如:
- overrideWith — 提供新的实现(例如,返回值或构建状态的函数)。
- overrideWithValue — 替换为固定值(例如,用于 FutureProvider/StreamProvider)。
- overrideWithBuild — 自定义构建逻辑(例如,用于 StreamProvider)。
请查看 Provider 的 API 以确认具体方法(例如,Provider.overrideWith、FutureProvider.overrideWithValue)。
示例:覆盖计数器
// Flutter
void main() {
runApp(
ProviderScope(
overrides: [
counterProvider.overrideWith((ref) => 42),
],
child: MyApp(),
),
);
}
// Dart
final container = ProviderContainer(
overrides: [
counterProvider.overrideWith((ref) => 42),
],
);
Family 覆盖
- 单个参数: 覆盖一个特定参数:
userProvider('123').overrideWith((ref) => User(name: 'User 123'))。 - 所有参数: 覆盖整个 family:
userProvider.overrideWith((ref, arg) => User(name: 'User $arg'))。
有关更多测试模式,请参见 riverpod-family 和 riverpod-testing。
评论
支持 Markdown