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. 01UI で処理の進捗と結果を表示
  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 が反応できる単一の非同期操作(例:「ToDo を追加中」「成功」「失敗」)を表します。メインのプロバイダー状態から読み込み/エラー/成功の状態を切り離せます。この API は実験的なものであり、変更される可能性があります。

mutation の定義

Mutation<T> インスタンスを作成します(T は結果の型で、省略可能です)。

final addTodo = Mutation<Todo>();

通常は、Notifier のグローバルまたは static final として保存します。

リッスン

Consumer 内(またはプロバイダー内)で 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)を受け取り、型 T の値を返す必要があります。

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

mutation の実行中にプロバイダーを維持するには、tsx.get(provider) を使用します。

キー付き mutation

キーを渡すと、複数のインスタンスを作成できます(例:リスト項目ごとに 1 つの mutation)。

ref.watch(deleteItemMutation(itemId));
deleteItemMutation(itemId).run(ref, (tsx) async { ... });
リセット

mutation は、完了時またはすべてのリスナーが削除されたときに Idle にリセットされます。手動でリセットするには、次のようにします。

addTodo.reset(ref);

最新の mutation API とジェネリクスについては、Riverpod の公式ドキュメントを参照してください。

コメント