Firestore复合查询不适用于Flutter Web



嗨,我在StreamBuilder 中有一个关于Firestore的简单查询

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']),那么它工作正常。

我对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((或另一个,它会很好。如果我两者都用,我总是得到";正在加载&";,这告诉我快照没有数据。

我也尝试过像Shahzad Akram一样将orderedBy((和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>

谢谢你的帮助。

相关内容

  • 没有找到相关文章

最新更新