【发布时间】:2021-09-04 05:38:07
【问题描述】:
在 Dart / Flutter 中的 Firestore 查询中添加限制时不会调用 Stream listen
final _startAtTimestamp = Timestamp.fromMillisecondsSinceEpoch(DateTime.parse('2000-01-01 01:01:01.001').millisecondsSinceEpoch);
我在initState() 函数中使用了以下代码:
@override
void initState() {
//
super.initState();
Future.delayed(Duration(seconds: 1), () async {
//
Stream<QuerySnapshot> xstream = FirebaseFirestore.instance
.collection('messages')
.where('encSenderUId', isEqualTo: _loggedInUserId)
.where('encReceiverUId', isEqualTo: widget.encUId)
.orderBy('messageId', descending: true)
.startAt([_startAtTimestamp])
.limit(1)
.snapshots();
xstream.listen((event) {
//
print('Hiii, I am listening..');
//
}, onDone: () {
print("Task Done single");
}, onError: (error) {
print("Some Error ${error.toString()}");
});
});
}
案例 1:如果我不在查询中使用 limit(),那么在第一次渲染屏幕时会打印一次 listen 消息,并且在 Firestore 中发生更改时也会调用 listen流(例如,添加新文档/删除文档)。
案例 2:如果我在查询中使用 limit(),则在第一次呈现屏幕时会打印一次 listen 消息,但在 Firestore 流中发生更改时会不调用 listen(例如,添加新文档/删除文档)。
我必须使用limit() 根据集合orderBy 获取一个文档。我 100% 确定 limit() 不允许流监听任何事件。
Firestore 结构如下:
请建议我如何使用 limit 和 `listen' 来解决这个问题。非常感谢。
【问题讨论】:
-
尝试在
listen方法中添加onError? -
@pskink 谢谢亲爱的,我已经添加了
onDone和onError回调方法和listen 但是系统不会进入这3 个listen、onDone和onError方法中的任何一个。我通过在末尾添加onDone和onError更新了问题。请检查并建议我。谢谢。 -
Firestore 数据库结构为awesomescreenshot.com/image/…
-
请在问题中包含您的 Firestore 结构作为屏幕截图。链接可能会中断和移动,这将使未来的读者无法使用。
-
谢谢@Jay 我已经在查询中添加了
Firestore Structure的屏幕截图。顺便说一句,您对此问题有任何解决方案吗?请分享。谢谢。
标签: flutter dart google-cloud-firestore stream listen