Как я могу получить все пользовательские документы из коллекции в flutter

#firebase #flutter #dart #google-cloud-firestore

#firebase #flutter #dart #google-cloud-firestore

Вопрос:

У меня есть коллекция с именем flpProduct в firestore. Я хочу получить доступ ко всем документам, хранящимся в коллекции flpProduct. Я пробовал это со многими Futurebuilder и Streambuilder, но ни один из них не работал.

Я попробовал это

  FutureBuilder<QuerySnapshot> (
        future: flpProductFuture,
        builder: (context, snapshot) {
          if (snapshot.hasError) {
            return Center(
              child: Text('Something went Wrong'),
            );
          }

          if (snapshot.connectionState == ConnectionState.done amp;amp;
              snapshot.hasData) {
            snapshot.data.documents.forEach((element) {
              print(element.data['title']);
            });
            return Text('done');
          }

          return Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Spinner(),
              Text(
                'Fetching Data',
                style: TextStyle(color: Colors.black54, fontSize: 18.0),
              )
            ],
          );
        },
      ),
  

Кажется, это дает мне данные, но как я могу теперь отобразить это в виджете.
У меня уже есть класс, который возвращает контейнер для отображения информации в отдельном классе. Я просто хочу передать данные в класс и отобразить их

Ответ №1:

Лучше использовать StreamBuilder, а не FutureBuilder, потому что StreamBuilder отвечает за изменения в реальном времени

 StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance.collection(Your collection Name).snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text('Something went wrong');
        }

        if (snapshot.connectionState == ConnectionState.waiting) {
          return Text("Loading");
        }

        return new ListView(
          children: snapshot.data.documents.map((DocumentSnapshot document) {
            return new ListTile(
              title: new Text(document.data()[key]),
              subtitle: new Text(document.data()[key]),
            );
          }).toList(),
        );
      },
    );