11月23日 進捗日記[自分用]

作業内容

・応用編のコード理解

学習内容

・Cloud Firestore関連の操作
 ・データの追加
 ・データの取得

[cloud firestore関連の操作]

Cloud firestoreへのデータの追加

新しいコレクション('attendees')にデータを追加。
.collectionでコレクションを指定
.docでドキュメントを指定
 今回はユーザごとに一意にしたいのでユーザーIDで登録している。
.setでフィールドに追加
 今回は要素が1つ(atendingのみ)だが複数の要素を持たせることもできる。

set attending(Attending attending) {
   final userDoc = FirebaseFirestore.instance
       .collection('attendees')
       .doc(FirebaseAuth.instance.currentUser!.uid);
   if (attending == Attending.yes) {
     userDoc.set(<String,bool>{'attending': true});
   } else {
     userDoc.set(<String,bool>{'attending': false});
   }
 }

Cloud firestoreからデータの取得

データの取得はいまいち理解できていないがおそらくここで受信してそう。
これもデータの追加同様にコレクションやドキュメントを指定する。

snapshotからデータを取得する。この時に動的な型でくるので静的な型に直す。今回は取得したデータを使って分岐処理をしている。

_attendingSubscription = FirebaseFirestore.instance
           .collection('attendees')
           .doc(user.uid)
           .snapshots()
           .listen((snapshot) {
         if (snapshot.data() != null) {
           if (snapshot.data()!['attending'] as bool) {
             _attending = Attending.yes;
           } else {
             _attending = Attending.no;
           }
         } else {
           _attending = Attending.unknown;
         }
         notifyListeners();
       });

今後に役に立ちそうな記事

CloudFirestoreの使い方の参考になる。
https://qiita.com/smiler5617/items/ba42b34e9ab215b42521

バグ関連

・動的型付け

firebaseとのやり取りの時の型がサンプルそのままではうまくいかなかった。

set attending(Attending attending) {
   final userDoc = FirebaseFirestore.instance
       .collection('attendees')
       .doc(FirebaseAuth.instance.currentUser!.uid);
   if (attending == Attending.yes) {
       //ここでエラー
       //(Missing type arguments for map literal)
     userDoc.set({'attending': true});
   } else {
       //同様にエラー
       //(Missing type arguments for map literal)
     userDoc.set({'attending': false});
   }
 }

mapの型が決まってないとのこと。静的に型をつけたら解決した。

set attending(Attending attending) {
   final userDoc = FirebaseFirestore.instance
       .collection('attendees')
       .doc(FirebaseAuth.instance.currentUser!.uid);
   if (attending == Attending.yes) {
     //静的型付け
     userDoc.set(<String,bool>{'attending': true});
   } else {
     //静的型付け
     userDoc.set(<String,bool>{'attending': false});
   }
 }

参考ページ(内容はほとんど関係ない)
https://makicamel.hatenablog.com/entry/2019/04/08/235919
https://flutternyumon.com/how-to-use-map/

Cloud FireStoreの画面

画像2

現在の動作画面

画像1

次回

今回も結局写経のような感じになってしまったので, 次回はこのコードを改変していく。
具体的には, 授業の満足度を3段階で答えて、その結果をアプリ上に表示する。



この記事が気に入ったらサポートをしてみませんか?