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