🐸

【Flutter】Riverpod2 で ProviderFamily を overrideWith する方法

2023/10/17に公開

riverpod2 の ProviderFamily は次のように overrideWith できます!

final normalExampleProvider = Provider.family.autoDispose<int, int>(
  (ref, id) {
    return id;
  },
);

// こうやって使う
normalExampleProvider.overrideWith((ref, id) => id + 1),

しかし、 riverpod_generator を使うとうまくいきません。。。

https://pub.dev/packages/riverpod_generator

パラメータを指定すればできる

riverpod_generator を使っている場合は、パラメータを指定すれば overrideWith できます!


int generateExample(GenerateExampleRef ref, {required int id}) {
  return id;
}

// こうやって使う
generateExampleProvider(id: 1).overrideWith((ref) => ref.id + 1),

riverpod_generator 2.3.0 未満は ref からパラメータにアクセスできませんが、次のようにやればできます!公式な方法ではないので自己責任でお願いします!

2.3.0 未満
// 2.3.0 未満はこうやって使う
generateExampleProvider(id: 1).overrideWith((ref) {
  final provider = (ref as AutoDisposeProviderElement).origin
      as GenerateExampleProvider;
  return provider.id + 1;
}),

こちらを参考にしました!

https://github.com/rrousselGit/riverpod/issues/2851

サンプルコードを公開しています

本記事で紹介したサンプルコードを公開しています!

https://github.com/susatthi/flutter-sandbox/blob/main/lib/main_riverpod_family_override.dart

最後に

Flutter 大学という Flutter エンジニアに特化した学習コミュニティに所属しています。オンラインでわいわい議論したり、Flutter の最新情報をゲットしたりできます!ぜひ Flutter 界隈を盛り上げていきましょう!

https://flutteruniv.com?invite_id=9hsdZHg0qtaMIr6RPRulAaRJfA83

Discussion