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

回答1件
あなたの回答
tips
プレビュー