前提
Firestoreの深い位置にある情報を取得したいです。というのも、
コレクションA-----ドキュメントB0---------コレクションC0----ドキュメントD0 |-フィールドb0 | | |-フィールドd0 |-フィールドb1 | | |-フィールドd1 |-フィールドb2 | | | |-ドキュメントD1 | |-コレクションC1---ドキュメントE0 | |-フィールドe0 | |-フィールドe1 | |-ドキュメントE1
という構造でデータを格納していて、
dart
Expanded( child: StreamBuilder<QuerySnapshot>( // 投稿メッセージ一覧を取得(非同期処理) // 投稿日時でソート stream: FirebaseFirestore.instance .collection('books') .doc(widget.bookInfo.id) .collection(widget.bookInfo['name']) .orderBy('date') .snapshots(), builder: (context, snapshot) { // データが取得できた場合 if (snapshot.hasData) { final List<DocumentSnapshot> documents = snapshot.data!.docs; : :
上のstreamの記述はこれで正しく、データの構造におけるドキュメントDの層をフィールドのdate順に表示することを示せているのですが、最後のdocuments=の部分で、この状態ではドキュメントBの層について格納していることになります。
dart
print(documents[0]['name']);
とすると、ドキュメントBの中のフィールドb層のnameの中身が出力される状態です。
実現したいこと
・ドキュメントD層の中のフィールドd層の中身を出力したいです。
つまり、
dart
print(documents[index]['name']);
でドキュメントD層をindexで指定し、それが持つフィールドdの内、nameの中身を出力できるように、1番最後の
dart
final List<DocumentSnapshot> documents = snapshot.???????;
を書き換えたいです。
発生している問題・エラーメッセージ
設計段階のためエラーは出ていません。
該当のソースコード
試したこと
dart
final List<DocumentSnapshot> documents = snapshot.data!.docs;
のsnapshotより後ろのdata!以下をいじったり、snapshotとdata!の間に文字を挟もうとしましたがダメでした。
補足情報(FW/ツールのバージョンなど)
pubspec.yaml
name: XXXX description: A new Flutter project. publish_to: 'none' environment: sdk: ">=2.17.6 <3.0.0" dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 firebase_core: ^1.17.1 firebase_crashlytics: ^2.8.1 firebase_analytics: ^9.1.8 flutter_inappwebview: ^5.3.2 firebase_auth: ^3.3.8 cloud_firestore: ^3.4.3 provider: ^5.0.0 flutter_riverpod: ^1.0.4 get: ^4.6.5 hive: ^2.2.3 hive_flutter: ^1.1.0 hive_generator: ^1.1.3 build_runner: ^2.2.0 flutter_slidable: ^2.0.0 sqflite: ^2.0.3 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 flutter: uses-material-design: true

0 コメント