Flutter Firestore データ 一覧 取得 snapshot Instance of ‘_JsonQueryDocumentSnapshot’
Contents
Summary (要約)
FlutterとFirestoreを使って、Firesotreのデータを一覧で取得しました。
しかし、printで見てみると、Instance of '_JsonQueryDocumentSnapshot’なる表示がされて、値が取得できているのかわかリませんでした。
Webのサンプル通りやっているのに、なぜこうなるのだろう。
Solved (解決)
解決したコードを表示します。
なお、firestoreにpostsという名前のコレクションにドキュメント(fieldにはcontentというfieldに何か文字列を入れておいて下さい)を2つ作成してから、以下のコードをあなたのDartファイルに追加して実行してください。(例えば、onPressed: () async {}の中に以下のコードを追加すれば、ボタンを押したときに、printが表示されます。)
final db = FirebaseFirestore.instance;
// var型で宣言してもOKだが、QuerySnapshot<Map<String, dynamic>>でも実行可能です。
//QuerySnapshot<Map<String, dynamic>> snapshot = await db.collection('posts').get();
var snapshot = await db.collection('posts').get();
print("snapshot ... $snapshot"); // Instance of '_JsonQuerySnapshot' が表示される
print("snapshot.docs ... ${snapshot.docs}"); // [Instance of '_JsonQueryDocumentSnapshot', Instance of '_JsonQueryDocumentSnapshot']が表示される。
print("snapshot.docs[0] ... ${snapshot.docs[0]}"); // Instance of '_JsonQueryDocumentSnapshot' が表示される。
print("snapshot.docs[0][content] ... ${snapshot.docs[0]['content']}"); // firestoreに保存したcontentの文字列が表示される。
print("snapshot.docs[1][content] ... ${snapshot.docs[1]['content']}"); // firestoreに保存したcontentの文字列が表示される。
print("snapshot.docs.length ... ${snapshot.docs.length}"); // 配列の長さ 2が表示される。
かっこいいコードではありませんが、エラーに遭遇している最中のあなたにとっては、役に立つのではと思います。
上のコードが動くことを確認したら、forループでも動作することを確認します。
for (var item in snapshot.docs) {
print(item['content']);
}
Good Luck!!