在Streambuilder中对集合使用where()会一直返回null



我正试图在集合中找到符合特定条件的所有文档,并将其保存在Streambuilder中,这样我就可以使用它返回的所有文档中的数据创建一个表。但是我在Streambuilder中的流一直为Flutter中的查询返回null。我在Python中尝试了同样的查询,它会返回正确的文档。流生成器中是否不可能有where查询?作为参考,这是一个网络应用程序。

这是我的代码

class ContainerCustomerTable extends StatefulWidget {
final company;
ContainerCustomerTable({this.company});
@override
_ContainerCustomerTableState createState() => _ContainerCustomerTableState();
}
class _ContainerTableState extends State<ContainerCustomerTable> {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection(widget.company).where('some_criteria', isEqualTo: true).snapshots(),
builder: (context, snapshot) {
print(snapshot);
QuerySnapshot docSnapshot = snapshot.data;
if (docSnapshot != null) {
return  Text('test1');
} else{
return LoadingIndicator();
}
}
);

我打印快照只是为了检查它返回了什么,它给了我这个

AsyncSnapshot<QuerySnapshot>(ConnectionState.active, null, [cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges')

因此,它为该查询返回null,但python中的同一查询同样会产生正确的结果。我做错了什么?

记录在案,当我运行以下程序时,它是有效的:

FirebaseFirestore.instance.collection(widget.company).doc('some_doc').snapshots()

但由于某种原因,当我只是在集合或where上运行快照时,我会在上发布错误

我想明白了。我的语法很好,是firestorejs包出错了。如果你正在使用firestore作为网络应用程序,请在你的web/index.html:中使用此版本

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

而不是上一个版本8.0.2,当时我降级了,一切都按预期进行。

请注意,在这里有数据之前,您还打印快照并分配docSnapshot:

print(snapshot);
QuerySnapshot docSnapshot = snapshot.data;
if (docSnapshot != null) {
return  Text('test1');
} else{
return LoadingIndicator();
}

为了安全起见,我会选择:

if (snapshot.hasData) {
print(snapshot);
QuerySnapshot docSnapshot = snapshot.data;
return  Text('test1');
} else{
return LoadingIndicator();
}

最新更新