riverpod-observers について
riverpod-observersは、RiverpodのProviderObserverによるライフサイクルイベントを使い、プロバイダーの変更を記録・分析・デバッグする方法を説明するスキルです。オブザーバーの設定やプロバイダーの命名に加え、状態を直接変更する際の注意点も扱います。
主な機能
- 01プロバイダーのライフサイクルイベントを監視
- 02スコープまたはコンテナーにオブザーバーを設定
- 03プロバイダーの更新を記録
- 04ログを明確にするプロバイダーの命名
- 05状態の直接変更による影響に注意
活用シーン
- 01プロバイダー値の変化を記録
- 02プロバイダーの動作をデバッグ
- 03分析用に更新を追跡
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ serverpod/ skills-registry --skill riverpod-observersインストール後、Claude Code で/riverpod-observersを入力して読み込まれたか確認します。
詳細
Riverpod — ProviderObservers
手順
ProviderObserver は、プロバイダーのライフサイクルイベント(プロバイダーの値が変化したときなど)を受け取ります。ログ記録、分析、デバッグに使用できます。
オブザーバーの実装
ProviderObserver を継承し、必要なメソッド(例:didUpdateProvider)をオーバーライドします。observers パラメーターを使用して、インスタンスを ProviderScope または ProviderContainer に渡します。
例:ロガー
final class Logger extends ProviderObserver {
@override
void didUpdateProvider(
ProviderObserverContext context,
Object? previousValue,
Object? newValue,
) {
print('{"provider": "${context.provider}", "newValue": "$newValue"}');
}
}
void main() {
runApp(
ProviderScope(
observers: [Logger()],
child: const MyApp(),
),
);
}
プロバイダーの命名
ログをよりわかりやすくするには、プロバイダーに name を指定します。
final myProvider = Provider<int>((ref) => 0, name: 'MyProvider');
コード生成を使用すると、通常は名前が自動的に割り当てられます。
ミューテーションに関する注意
状態をインプレースで変更した場合(例:ref.notifyListeners を使用する List)、didUpdateProvider の previousValue と newValue は同じ参照になることがあります。異なる値にするには、変更前にクローンを作成してください。
コメント
Markdown 対応