Flutter Firestore データ 一覧 取得 snapshot Instance of ‘_JsonQueryDocumentSnapshot’

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!!