mcpField
R
riverpod-overrides

riverpod-overrides

github.com/serverpod开发1078 次安装34 周前更新
代码仓库

关于 riverpod-overrides

riverpod-overrides 是介绍如何通过容器级覆盖来更改 Riverpod Provider 行为的参考技能,适用于 Flutter 和 Dart。内容涵盖实现、值和构建覆盖,以及针对单个参数或整个 Provider family 的覆盖方式。

主要功能

  1. 01在 ProviderScope 或 ProviderContainer 设置覆盖
  2. 02使用实现、值和构建覆盖方法
  3. 03覆盖单个 family 参数或整个 family
  4. 04用于测试和不同环境

适用场景

  1. 01在测试中提供固定的 Provider 值
  2. 02调试时替换 Provider 行为
  3. 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