【发布时间】:2021-10-09 23:50:57
【问题描述】:
我正在尝试查询一个 Stream,其中文档应该在 'unit' 数组中包含 'UretimKurulum' 和 '日期'应该等于或大于今天的日期。
在流式传输此查询时,我确实在短短几秒钟内得到了我想要的正确结果,然后它显示“无可用数据”。
下面是实际代码:
final FirebaseFirestore _db = FirebaseFirestore.instance;
final DateTime _now = DateTime.now();
final String val = 'UretimKurulum';
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot<Object>>(
stream: _db.collection('Schedule').where('date', isGreaterThanOrEqualTo: _now).where('unit', arrayContains: val).snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: LinearProgressIndicator());
} else {
if (!snapshot.hasData) {
return Center(child: Text('No Data Available'));
} else {
return ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
var docSnap = snapshot.data!.docs[index];
return Text(docSnap.id);
},
);
}
}
},
);
}
}
如果我尝试删除:
if (!snapshot.hasData) {
return Center(child: Text('No Data Available'));
}
我收到以下错误:
════════ Exception caught by widgets library ═══════════════════════════════════
The following TypeErrorImpl was thrown building StreamBuilder<QuerySnapshot<Object>>(dirty, state: _StreamBuilderBaseState<QuerySnapshot<Object>, AsyncSnapshot<QuerySnapshot<Object>>>#0508a):
Unexpected null value.
【问题讨论】:
-
这个问题是否与 Firestore 中的复合查询索引有关?调试控制台不显示添加索引的链接。
-
您可以尝试将
|| snapshot.data == null添加到if (!snapshot.hasData) {行。不知道会不会有什么效果,但值得一试。 -
@JaffaKetchup 不幸的是它没有效果
标签: firebase flutter google-cloud-firestore stream-builder