如何解决通过Streams仅动态检查集合中的第一个文档会导致问题-Flutter
我陷入了我遇到过的最奇怪问题之一。我正在尝试使用流从数据库访问数据。从HomeViewModel
类开始。我正在调用位于database
类内部的函数
class HomeViewModel {
.....
Stream<List<ItemParentSubCtg>> _itemParentSubCtgProvider =
DatabaseService().getSingleItemParentSubCtg(_itemCtgID); // From here _itemCtgID is something
// like that "itemCtg1" or "itemCtg2" etc
.....
}
下面是 database.dart
类。这里发生了奇怪的问题。在。where("itemCtgID",isEqualTo: passedCtgID)
中,我在此处添加了print语句,以确保获得所需的东西。
如果passedCtgID
是itemCtg2
或itemCtg3
或上面的任何数字都可以正常工作,但是如果passedCtgID
等于itemCtg1
,则它将永远不会在数据库中找到相应的值即使他们在那里。
只是为了解决问题的根源,我在itemCtg1
的{{1}}之后传递了静态isEqualTo
,并且工作正常。只有where
等于passedCtgID
才有效
itemCtg1
如果来自 Stream<List<ItemParentSubCtg>> getSingleItemParentSubCtg(String passedCtgID) {
print(
"-----> getSingleItemParentSubCtg inside Database is invoked and passedCtgID is: "+ passedCtgID);
return itemParentSubCtgCollection
.where("itemCtgID",isEqualTo: passedCtgID) // <---- HERE STATIC VALUE OF itemCtg1 LIKE("itemCtgID",isEqualTo: "itemCtg1")
// works fine. But passedCtgID is equal to "itemCtg1" as shown
// in above statment but it won't work
.getDocuments()
.asStream()
.map(_itemParentSubCtgDataFromSnapshot);
}
List<ItemParentSubCtg> _itemParentSubCtgDataFromSnapshot(
QuerySnapshot snapshot) {
print(
">>>>>>>>>>> _itemParentSubCtgDataFromSnapshot inside database INVOKED and snapshot length is : " +
snapshot.documents.length.toString());
List<ItemParentSubCtg> itemsParentSubCtgList = List<ItemParentSubCtg>();
for (int i = 0; i < snapshot.documents.length; i++) {
itemsParentSubCtgList.add(ItemParentSubCtg(
itemParentSubCtgID: snapshot.documents[i].data['itemParentSubCtgID'] ?? "",name: snapshot.documents[i].data['name'] ?? "",pic: snapshot.documents[i].data['pic'] ?? "",));
}
return itemsParentSubCtgList;
}
的passedCtgID为homeViewModel
itemCtg2
如果I/flutter (32022): -----> getSingleItemParentSubCtg inside Database is invoked and passedCtgID is: itemCtg2
I/flutter (32022): >>>>>>>>>>> _itemParentSubCtgDataFromSnapshot inside database INVOKED and snapshot length is : 2
中的passedCtgID
是homeViewModel
itemCtg1
如果我像这样I/flutter (32022): -----> getSingleItemParentSubCtg inside Database is invoked and passedCtgID is: itemCtg1
I/flutter (32022): >>>>>>>>>>> _itemParentSubCtgDataFromSnapshot inside database INVOKED and snapshot length is : 0
那样静态放置itemCtg1
,则输出
.where("itemCtgID",isEqualTo: "itemCtg1")
数据库看起来像这样
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com(将#修改为@)