Как получить коллекцию из снимка документа Firebase - PullRequest
0 голосов
/ 03 апреля 2020

Я структурировал свою базу данных firestore следующим образом:

enter image description here

для отображения данных во флаттере, я использую streambuilder следующим образом:

StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance.collection('myCollection').snapshots(),
      builder: (context, snapshot) {
        return Container(
          child: ListView.builder(    
            itemCount: snapshot.data.documents.length,
            itemBuilder: (BuildContext context, int index) =>
                _buildListItem(context, snapshot.data.documents[index]),
          ),
        );
      }),
Widget _buildListItem(BuildContext context, DocumentSnapshot document) { 

 return ListTile(
title: Row(
  children: <Widget>[
    Text(document.documentID),
    Spacer(),
    Text(document['allocatedSource'].toString()),
  ],
),

как мне получить доступ к подколлекции следующим образом: subtitle: Text (document.documentID.collection ('post'). Document).

Я могу получить к нему доступ, если объявлю поток следующим образом:

StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance
          .collection('myCollection')
          .document(documentId)
          .collection('post')
          .snapshots(),...

но тогда я потеряю доступ к documentID из коллекции. Должен ли я объявить 2 потока или гнездо streambuilder?

1 Ответ

1 голос
/ 03 апреля 2020

Данные подколлекции не включены в снимки документа. Запросы Firestore являются мелкими и рассматривают документы только в пределах одной коллекции.

Если вам нужны данные вложенной коллекции, вам нужно будет сделать новый запрос, используя имя вложенной коллекции, которое вы знаете заранее, как вы уже видели.

И я укажу, что вы не «потеряли» доступ к documentId во втором запросе. Это все еще в памяти, и вы можете использовать его по своему желанию. Вы также можете просмотреть родительский документ и коллекции, чтобы получить искомый идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...