mcpField
R
riverpod-mutations

riverpod-mutations

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

关于 riverpod-mutations

riverpod-mutations 是介绍 Riverpod 实验性 Mutations API 的技能,面向需要将单次异步操作状态与主要 Provider 状态分离的开发者。内容涵盖状态监听、触发、按键区分实例和重置。

主要功能

  1. 01表示单次异步操作
  2. 02监听空闲、进行中、成功和错误状态
  3. 03通过回调触发操作并返回结果
  4. 04按键管理多个 Mutation 实例
  5. 05支持手动重置状态

适用场景

  1. 01在界面中呈现操作进度与结果
  2. 02避免将加载和错误状态放入主要 Provider 状态
  3. 03为列表中的每个项目分别跟踪操作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/serverpod/skills-registry --skill riverpod-mutations

安装后在 Claude Code 中输入/riverpod-mutations确认已加载。

详细介绍

Riverpod — Mutations(实验性)

说明

Mutations 表示 UI 可以响应的单个异步操作(例如“添加待办事项”进行中、成功或失败)。它们将加载、错误和成功状态从主 provider 状态中分离出来。此 API 仍处于实验阶段,可能会发生变化。

定义 mutation

创建一个 Mutation<T> 实例(T 是结果类型,可选):

final addTodo = Mutation<Todo>();

通常将其作为全局变量,或作为 Notifier 上的 static final 成员存储。

监听

在 Consumer 中(或 provider 内部)使用 ref.watch 驱动 UI:

final addTodoState = ref.watch(addTodo);

// In build:
backgroundColor: switch (addTodoState) {
  MutationError() => const WidgetStatePropertyAll(Colors.red),
  _ => null,
},
if (addTodoState is MutationPending) ...[
  const SizedBox(width: 8),
  const CircularProgressIndicator(),
],
状态
  • MutationIdle — 尚未启动或已重置。
  • MutationPending — 进行中。
  • MutationSuccess — 已成功;结果可用。
  • MutationError — 已失败;错误可用。

使用 switch 根据状态处理每种情况。

触发

调用 Mutation.run(ref, callback)。回调会接收一个事务对象(例如 tsx),用于访问 providers,并且必须返回 T 类型的值:

addTodo.run(ref, (tsx) async {
  final todoNotifier = tsx.get(todoNotifierProvider.notifier);
  final createdTodo = await todoNotifier.addTodo('Eat a cookie');
  return createdTodo;
});

使用 tsx.get(provider),让 providers 在 mutation 执行期间保持存活。

按键区分的 mutations

传入一个 key,即可创建多个实例(例如,每个列表项一个 mutation):

ref.watch(deleteItemMutation(itemId));
deleteItemMutation(itemId).run(ref, (tsx) async { ... });
重置

mutations 会在完成时或所有监听器移除时重置为 Idle。手动重置:

addTodo.reset(ref);

有关最新的 mutation API 和泛型,请参阅 Riverpod 官方文档。

评论

支持 Markdown