在 Streambuilder 中的集合上使用 where() 会一直返回 null
Using where() on a collection in Streambuilder keeps returning null
我试图在一个集合中找到符合特定条件的所有文档,并将其放入 Streambuilder 中,以便我可以使用来自所有文档的数据创建一个 table returns .但是我在 Streambuilder 中的流不断为我在 Flutter 中的查询返回 null。我在 Python 中尝试了相同的查询,它 returns 正确的文档。在 streambuilder 中不可能有 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();
}
}
);
我正在打印快照只是为了检查它 returns 它给了我这个
AsyncSnapshot<QuerySnapshot>(ConnectionState.active, null, [cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges')
所以它为该查询返回空值,但 python 中的相同查询再次产生正确的结果。我做错了什么?
郑重声明,当我 运行 以下内容时,它有效:
FirebaseFirestore.instance.collection(widget.company).doc('some_doc').snapshots()
但出于某种原因,当我只是 运行 集合或 where 上的快照时,我收到上面发布的错误
我明白了。我的语法很好,错误的是 firestore js 包。如果您将 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();
}
我试图在一个集合中找到符合特定条件的所有文档,并将其放入 Streambuilder 中,以便我可以使用来自所有文档的数据创建一个 table returns .但是我在 Streambuilder 中的流不断为我在 Flutter 中的查询返回 null。我在 Python 中尝试了相同的查询,它 returns 正确的文档。在 streambuilder 中不可能有 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();
}
}
);
我正在打印快照只是为了检查它 returns 它给了我这个
AsyncSnapshot<QuerySnapshot>(ConnectionState.active, null, [cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges')
所以它为该查询返回空值,但 python 中的相同查询再次产生正确的结果。我做错了什么?
郑重声明,当我 运行 以下内容时,它有效:
FirebaseFirestore.instance.collection(widget.company).doc('some_doc').snapshots()
但出于某种原因,当我只是 运行 集合或 where 上的快照时,我收到上面发布的错误
我明白了。我的语法很好,错误的是 firestore js 包。如果您将 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();
}