初期設定
インストール
firebase_core
cloud_firestore
firebase_core: ^2.3.0
cloud_firestore: ^4.1.0
FirebaseFirestoreのインスタンスを作成
final FirebaseFirestore _db = FirebaseFirestore.instance;
データをとってくる
どんなデータをとってくるの?
とってくるデータには主に2種類ある。QuerySnapshotとDocumentSnapshotだ。
collectionはグループの名前で、documentはそのグループに含まれる一つ一つの要素だ。たとえば、collectionはusers, posts, followersみたいにsをつけるのが一般的。documentはそれぞれ固有のIDが指定され(自分で指定もできる)、キーと値のペアをいっぱい持っている。
上の画像で言うと、「dogs」collectionの中に、「XLfnw0faPK7q4IOl3LtC」みたいな固有IDをもつdocumentが何個かある。そしてその中に、color(キー):brown(値)のペアが色々格納されている。
まとめるとこんな感じになる。複数のdocumentをとってくる時の戻り値はQuerySnapshot、一つのdocumentをとってくるときはDocumentSnapshotになる。
A QuerySnapshot is returned from a collection query, and allows you to inspect the collection, such as how many documents exist within it, gives access to the documents within the collection, see any changes since the last query and more.
To access the documents within a QuerySnapshot, call the docs property, which returns a List containing DocumentSnapshot classes.
A DocumentSnapshot is returned from a query, or by accessing the document directly. Even if no document exists in the database, a snapshot will always be returned.
If the document exists, you can read the data of it by calling the data method, which returns a Map, or null if it does not exist:
データの取得方法
以下のように、whereで探したdocumentたちを変数queryに格納しておいて、必要に応じてそこのdataをとり出していく、という使い方が一般的だと思う。この場合、queryにはQuerySnapshotが入っているので以下のプロパティ, メソッドにアクセスできる。
final query = await _db.collection("users").where("userId", isEqualTo: firebaseUser.uid)
.get();
とってきたデータはこんな感じで使うことができる。これはdataがあったら、trueを返す関数の一部を抜粋したものだ。
if(query.docs.isNotEmpty){
return true;
}
setのように、値を狙い撃ちする場合は、DocumentSnapshotがshotが返って来るので、以下のプロパティ, メソッドにアクセスできる。
_db.collection("users").doc(user.userId).set(user.toMap());
終わりに
cloudFirestoreからデータをとって来る方法を、まとめました。
僕も手探りでやってるので、間違いがあれば指摘してくれると助かります。