StreamBuilder с загрузкой Firestore против данных - PullRequest
0 голосов
/ 03 февраля 2020

Для меня это немного похоже на ошибку, но я не уверен. У меня есть простой запрос Firestore в приложении Flutter, которое я запускаю через Stream Builder. Выглядит примерно так -

StreamBuilder(
  stream: Firestore.instance.collection('users').where('toNumber', isEqualTo: '123').snapshots();
  builder: (context, snapshot) {
  if (!snapshot.hasData) {
    return Center(
      child: CircularProgressIndicator(),
    );
  } else {
    if (snapshot.data.length == 0) {
      return Center(child: Text("No Data"));
    } else {
      return ListView.builder(
        itemCount: snapshot.data.length,
        itemBuilder: (context, index) =>
            _buildList(
                context, snapshot.data[index]),
      );
    }   
  }
)

Проблема в том, что если запрос не возвращает результатов, то все, что вы видите в индикаторе непрерывного прогресса. Я бы подумал hasData вернул бы истину, но, похоже, это не так. Я также пытался использовать ConnectionState, но это всегда возвращает .waiting.

В этой ситуации, как бы вы различали запрос, который загружается, и запрос, который не возвращает никаких результатов?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Вот мой метод сборки. Я только что проверил, это работает.

@override
Widget build(BuildContext context) {
    return StreamBuilder(
        stream: firestore
            .collection('todos')
            .where('state', isEqualTo: false)
            .snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
          print(snapshot.connectionState);
          if (!snapshot.hasData) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          return snapshot.data.documents.isNotEmpty
              ? ListView.builder(
                  itemCount: snapshot.data.documents.length,
                  itemBuilder: (_, index) {
                    return Text(snapshot.data.documents[index].data["title"]);
                  })
              : Text('No Data');
        });
}

Печать:

I/flutter ( 6216): ConnectionState.waiting
I/flutter ( 6216): ConnectionState.active
0 голосов
/ 03 февраля 2020

Попробуйте следующее:

if (!snapshot.hasData) {
 if (snapshot.data.length == 0) {
      return Center(child: Text("No Data"));
    }
   else{ 
    return Center(
      child: CircularProgressIndicator(),
    );
  }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...