riverpod-pull-to-refresh について
非同期 Provider を使ったプルツーリフレッシュの実装を説明する Riverpod スキルです。Provider の Future の再取得と、AsyncValue による読み込み中、既存データ、エラーの表示を扱います。
主な機能
- 01非同期 Provider の設定
- 02RefreshIndicator との連携
- 03Provider の Future の再取得
- 04AsyncValue 状態の処理
活用シーン
- 01スクロール可能なリストへのプルツーリフレッシュ追加
- 02更新中も既存データを表示
- 03取得データの読み込み中とエラー状態の表示
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ serverpod/ skills-registry --skill riverpod-pull-to-refreshインストール後、Claude Code で/riverpod-pull-to-refreshを入力して読み込まれたか確認します。
詳細
Riverpod — プルして更新
手順
Riverpod はプルして更新する操作に適しています。プロバイダーを無効化して更新し、読み込み・データ・エラーの状態の処理は AsyncValue に任せます。
1. プロバイダーと UI
データを取得する非同期プロバイダー(例:FutureProvider または AsyncNotifierProvider)を定義します。ref.watch(provider) で表示すると、AsyncValue を取得できます。
2. RefreshIndicator
スクロール可能なウィジェット(ListView、SingleChildScrollView など)を RefreshIndicator で囲みます。onRefresh では ref.refresh(provider.future) を呼び出し、新しいデータが読み込まれるまでインジケーターを表示し続けます。
RefreshIndicator(
onRefresh: () => ref.refresh(activityProvider.future),
child: ListView(
children: [
// content
],
),
)
3. 読み込み状態とエラー状態
AsyncValue のパターンマッチングを使用します。
- 初回読み込み: データもエラーもない場合は、全画面のスピナーを表示します。
- 更新: 更新インジケーターを表示し、新しい結果が届くまで以前のデータ(または以前のエラー)を表示し続けます。
- データ:
AsyncValue(:final value?)などを使用して値を表示します。 - エラー:
AsyncValue(:final error?)を使用してエラーを表示します。
例(構文は Riverpod のバージョンによって異なる場合があります):
final activity = ref.watch(activityProvider);
switch (activity) {
AsyncValue<Activity>(:final value?) => Text(value.activity),
AsyncValue(:final error?) => Text('Error: $error'),
_ => const CircularProgressIndicator(),
}
API で nullable なデータに対して公開されている場合は、valueOrNull(または同等の機能)を使用します。お使いのバージョンの AsyncValue API の正確な仕様については、ドキュメントを参照してください。
コメント
Markdown 対応