mcpField
R
riverpod-scoping

riverpod-scoping

github.com/serverpod開発1073 回インストール34 週間前に更新
リポジトリ

riverpod-scoping について

ルート以外の ProviderScope でオーバーライドし、アプリの一部だけで Provider の動作を変える方法を説明する Riverpod スキルです。依存関係の宣言を扱い、スコープ機能は複雑で今後変更される可能性があると注意しています。

主な機能

  1. 01Provider のスコープ利用を有効化
  2. 02スコープ依存関係の宣言
  3. 03サブツリー内で値をオーバーライド
  4. 04ツリー内での family 引数受け渡しを回避

活用シーン

  1. 01ページ単位でテーマなどの値を変更
  2. 02変更されたリスト項目だけを再ビルド
  3. 03サブツリーに現在の項目 ID を提供

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/riverpod-scopingを入力して読み込まれたか確認します。

詳細

Riverpod — プロバイダーのスコープ設定

手順

スコープ設定とは、ルート以外の ProviderScope でプロバイダーをオーバーライドし、アプリの一部でのみプロバイダーの動作を変更することです。用途としては、ページごとのカスタマイズ(例:あるページだけのテーマ)、パフォーマンスの最適化(例:ListView で変更された項目だけを再ビルドする)、または family パラメーターをツリー内で渡すのを避けることが挙げられます。

注: スコープ設定は複雑で、今後の Riverpod のバージョンで変更される可能性があります。慎重に使用してください。

オプトイン:dependencies

デフォルトではプロバイダーをスコープ設定できません。プロバイダーに dependencies を設定してオプトインします。最初にスコープ設定するプロバイダーでは、通常 dependencies: const [] を指定します。

final currentItemIdProvider = Provider<String?>(
  dependencies: const [],
  (ref) => null,
);
スコープ設定されたプロバイダーの監視

通常どおり ref.watch/ref.read を使用します。別のプロバイダーがスコープ設定されたプロバイダーを監視する場合、監視する側のプロバイダーでは、スコープ設定されたプロバイダーを dependencies に指定する必要があります。

final currentItemProvider = FutureProvider<Item?>(
  dependencies: [currentItemIdProvider],
  (ref) async {
    final currentItemId = ref.watch(currentItemIdProvider);
    if (currentItemId == null) return null;
    return fetchItem(id: currentItemId);
  },
);

dependencies に指定する必要があるのは、スコープ設定されたプロバイダーだけです。スコープ設定されていないプロバイダーは必要ありません。

スコープ値の設定:overrides

スコープ値を適用するサブツリーをラップする ProviderScope で overrides を使用します。

ProviderScope(
  overrides: [
    currentItemIdProvider.overrideWithValue('123'),
  ],
  child: const DetailPageView(),
)

これにより、詳細ページでは手動で値を渡さなくても、現在の項目 ID として '123' が認識されます。オーバーライドの構文については、riverpod-overrides を参照してください。

コメント