Closed2

Flutter+Firstore+Riverpodアーキテクチャ

welchiwelchi

Repositoryパターン

データへの永続化を隠蔽するパターン

ドメイン駆動設計的には、そういう永続化の「実装」の関心事と、ドメイン(問題領域)の関心事を分離することを重視する。

あるFirestoreコレクションに対し複数クエリを使いたい場合、どう設計するか悩む。

class TodoRepository{
  TodoRepository(this._read) {
    // ..
    final todosRef = FirebaseFirestore.instance.collection('todos');
    final mmQuery = todosRef.where('field',isEqualTo: 'mm',);
    final xxQuery = todosRef.where('field',isEqualTo: 'xx',);
  }
  void add(Todo todo)async{
  }
}

Repositories パターン : データベースの実装は忘れようね | システム設計日記
やはりお前たちのRepositoryは間違っている - Qiita

welchiwelchi

StateNotifier+Firestore

基本、StateNotifierは1画面につき1つにしておく方が個人的に使いやすい。
Firestoreでsnapshots()を使いつつ、リアルタイムにstateを更新するにはsnapshots().listen()内へ処理を書く。


class TodoController extends StateNotifier<TodoState> {
  TodoController(this._read) : super(TodoState()) {
     todoQuery.snapshots().listen((snapshot) {
        final newTodos = snapshot.docs
            .map(
              (doc) => Todo.fromJson(
                doc.data(),
              ),
            )
            .toList();
        state = state.copyWith(todos:newTodos);
      });
  }
}

このスクラップは2021/01/01にクローズされました