Riverpod Providerまとめ

プロバイダを利用する理由

  • VueXのように、アプリの様々な場所からステートにアクセスできるようになります。VueXのsotreのようなもの。 プロバイダはシングルトンや、依存性注入(テストがやりやすいということ)、あるいは InheritedWidget(Flutterのパーツ) を完全に代替することができます。

生成

グローバルとして生成する

final myProvider = Provider((ref) {
  return MyValue();
});

プロバイダを利用するには、Flutter アプリのルート(root)に ProviderScope を置く必要があります。

main.dart

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await FlutterFlowTheme.initialize();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(ProviderScope(
    child: ThaiDic(),
    ));
}

プロバイダの宣言

final dbProvider = Provider((ref) => FirebaseFirestore.instance);
final authProvider = Provider((ref) => FirebaseAuth.instance);

利用時はreadを利用

CollectionReference<Map<String, dynamic>> collectionRef() {

//readで呼び出し
    return read(dbProvider).collection(collectionName);
  }

現在のところ、修飾子は2種類あります。

.autoDispose はプロバイダの監視が終わったタイミングで、プロバイダに自動でステートを破棄させることができるようになります。 .family はプロバイダ外部の値を用いてプロバイダを作成できるようになります。

final myAutoDisposeProvider = StateProvider.autoDispose<int>((ref) => 0);
final myFamilyProvider = Provider.family<String, int>((ref, id) => '$id');

参考にさせていただきました。

riverpod.dev