Как получить конкретный документ Firestore с помощью StreamBuilder - PullRequest
0 голосов
/ 20 октября 2019

Это настройка того, что я сейчас использую:

class BookList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance.collection('books').snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError)
          return new Text('Error: ${snapshot.error}');
        switch (snapshot.connectionState) {
          case ConnectionState.waiting: return new Text('Loading...');
          default:
            return new ListView(
              children: snapshot.data.documents.map((DocumentSnapshot document) {
                return new ListTile(
                  title: new Text(document['title']),
                  subtitle: new Text(document['author']),
                );
              }).toList(),
            );
        }
      },
    );
  }
}

Когда я хочу получить конкретный документ, я прочитал, увидел следующий пример:

Firestore.instance
        .collection('talks')
        .document('document-name')
        .get()
        .then((DocumentSnapshot ds) {
      // use ds as a snapshot
    });

Проблема заключается вчто я не знаю, как использовать этот пример с моим Streambuilder. Когда я попробовал это:

...

body: StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance
        .collection('talks')
        .document('document-name')
        .get()
        .then((DocumentSnapshot ds) {
      // use ds as a snapshot
    }),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.data == null)
            return Center(child: CircularProgressIndicator());
          if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
          if (snapshot.data.documents.length == 0)
...

Я получил:

Тип аргумента 'Future' не может быть присвоен типу параметра 'Stream'.dart (arguments_type_not_assignable)

1 Ответ

0 голосов
/ 20 октября 2019

В библиотеке Flutter для Firestore вы можете получить поток одного документа, вызвав DocumentReference.snapshots() метод .

Так что-то вроде:

stream: Firestore.instance.collection('books').document('document-name').snapshots(),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...