riverpod-mutations について
riverpod-mutations は、Riverpod の実験的な Mutations API を扱うスキルです。単一の非同期処理の状態を主要な Provider の状態から分離したい開発者向けに、監視、実行、キー付きインスタンス、リセット方法を説明します。
主な機能
- 01単一の非同期処理を表現
- 02待機中・実行中・成功・エラー状態の監視
- 03結果を返すコールバックの実行
- 04キーによる複数 Mutation の管理
- 05状態の手動リセット
活用シーン
- 01UI で処理の進捗と結果を表示
- 02主要な Provider の状態から読み込み・エラー状態を分離
- 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 の公式ドキュメントを参照してください。