Составной запрос Firestore не работает для Flutter Web - PullRequest
0 голосов
/ 02 августа 2020

Привет, у меня есть простой запрос для Firestore в StreamBuilder

StreamBuilder(
          stream: FirestoreManager.firebaseFirestore
              .collection("orders")
              .orderBy('logs.0', descending: true)
              .where('status', whereIn: current['id'])
              .snapshots(),
          builder: (BuildContext context, AsyncSnapshot<dynamic> snap) {
            print(snap.data.toString());
            if (!snap.hasError && snap.hasData) {
              QuerySnapshot snapshot = snap.data;
              if (snapshot.documents.isNotEmpty) {
                List<DocumentSnapshot> snapList = snapshot.documents;
                return ListView.builder(
                  padding: EdgeInsets.only(right: 10, left: 10),
                  physics: ScrollPhysics(),
                  itemCount: snapList.length,
                  shrinkWrap: true,
                  itemBuilder: (BuildContext context, int index) {
                    return OrderListItem(
                      order: Order.fromJson(snapList[index].data),
                    );
                  },
                );
              } else {
                return Center(
                  child: Text(
                    "No ${current['status'].toString().trim()} Order Available...!",
                    style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                  ),
                );
              }
            } else {
              return Center(
                child: CircularProgressIndicator(),
              );
            }
          })

Он отлично работает для мобильного приложения, но когда я пытаюсь запустить его для Интернета, он не работает. Фактически он показывает данные один раз на секунду и снова исчезает. Я получил следующий журнал в консоли, распечатав данные моментального снимка, используя print(snap.data.toString());

js_primitives.dart:30 null
js_primitives.dart:30 Instance of 'QuerySnapshot'
js_primitives.dart:30 null

Почему это происходит? Почему он показывает данные один раз, а исчезают его снова? Если я удалю .orderBy('logs.0', descending: true) или .where('status', whereIn: current['id']), все будет нормально.

1 Ответ

0 голосов
/ 29 августа 2020

У меня такая же проблема с Flutter Web. Я пытаюсь использовать два связанных метода where (), и это не дает мне никаких результатов:

StreamBuilder(
    stream: fire
        .collection('thiHistory')
        .where("device", "==", _device)
        .where("ts", '>=', ts)
        .onSnapshot,
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (!snapshot.hasData) return Text('Loading....');

      final docs = snapshot.data.docs;

      return ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: docs.length,
          itemBuilder: (context, index) {
            final doc = docs[index].data();
            return doc["device"] == _device ? Column(
              children: [
                Text(doc['device']),
                Text("${doc["hour"]}"),
                Text("${doc["temp"]}"),
                Text("${doc["humi"]}"),
                Text("${doc["thi"]}"),
              ],
            ) : Container();
          });
    },
  )

Если я использую только один where () или другой, он работает нормально. Если я использую оба, я всегда получаю «Загрузка ....», что говорит мне, что в моментальном снимке нет данных.

Я также пробовал связать orderBy () с where (), как Шахзад Акрам, и то же самое. .. Использование одного или другого отлично работает, их объединение не возвращает данных.

Я использую пакет firebase 7.3.0 и версию 7.19.1 библиотек:

  <script src="https://www.gstatic.com/firebasejs/7.19.1/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.19.1/firebase-database.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.19.1/firebase-firestore.js"></script>

Спасибо за вашу помощь.

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