Подборка документов Firestore Query Document - PullRequest
1 голос
/ 13 апреля 2020
  • Я изучаю флаттер / дартс и пытаюсь подключиться к своей базе данных пожарного депо. Я хочу запросить коллекцию для документа, а затем коллекцию в этом документе. Я все еще изучаю дартс, и я обнаружил, что асин c создание потоков должно быть лучшим методом. Я пробовал db.instance.collect (''). Document (''). Collection (''). Snapshot (), но streambuilder, кажется, не поддерживает это, и я получаю ошибку 'Метод' collection 'isn' t определено для типа «Запрос». Я должен завершить свой запрос после db.instance.collection (''). Where ('name' isEqualto: 'Name'). Snapshots () Ниже приведен пример. Моя цель - запросить все классы и представить их в списке.
  • EX: Учителя <- 1-я коллекция Имя учителя <- Документ в коллекции Занятия <--- Сборник 2 Class1 <- Запрос это Class2 <--- Запрос This </p>

       import 'package:flutter/material.dart';
       import 'package:cloud_firestore/cloud_firestore.dart';
    
       class ClassListPage extends StatelessWidget{
         @override
    
    
         Widget build(BuildContext context){
           return Material(
                 child: new StreamBuilder<QuerySnapshot>(
               stream: Firestore.instance.collection('Teachers').
               where('name', isEqualTo: 'Dr. Who')
              //.collection('Classes') <--This is not working
               .snapshots(),
               //HERE is where I want to query for the 'classes' collection then query
           //for the documents within
               builder:(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
                 if(!snapshot.hasData)return new Text('..Loading');
                 return new ListView(
                   children: snapshot.data.documents.map((document){
                     return new ListTile( 
                       title: new ListTile(
                         title: new Text(document['name']),
    
                       ),
                     );
    
                   }).toList(),
                   );
               }
    
             ),
           );
    
         }
       }
    

1 Ответ

2 голосов
/ 13 апреля 2020

В своем вопросе вы говорите, что используете db.instance.collection('').document('').collection('').snapshot(), но в вашем коде нет вызова на document(). Вот что я вижу:

Firestore.instance
    .collection('Teachers')
    .where('name', isEqualTo: 'Dr. Who')
    .collection('Classes')
    .snapshots()

Это не сработает, потому что where() возвращает запрос, а у запроса нет collection() метода. Похоже, что вместо этого вам нужно выполнить этот запрос, посмотреть документы в наборе результатов (может быть любое число, а не только 1), а затем выполнить другой запрос для подколлекций каждого документа.

...