【发布时间】:2020-04-12 11:38:36
【问题描述】:
我正在尝试在包含侦听器的函数上实现未来返回。当侦听器至少返回一次数据时,我想完成这个未来。我没有使用 async/await 因为监听功能不是未来。因此,我的选择如下:
static Future listenForConsumption() async {
Completer completer = Completer();
try {
kConsumptionCollection
.where("userId", isEqualTo: User.current.id)
.orderBy("consumptionDate", descending: true)
.snapshots()
.listen(
(data) {
consumptionList = data.documents
.map((doc) => ConsumptionUnit.data(doc.documentID, doc.data))
.toList();
streamController.add(consumptionList);
completer.complete();
},
);
} catch (err) {
completer.complete();
throw (err);
}
return completer.future;
}
通过使用 Completer,我试图等待侦听器完成。但是,调用这个函数的函数似乎并没有等待未来完成:
void _checkForCurrentUser() async {
try {
await UserManager.fetchCurrentUser(); //Function waits for this
await Future.wait([
ConsumptionManager.listenForConsumption(),
BottleManager.listenForBottles(),
]); //Function does not wait for this
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Home()),
);
} catch (err) {
log("$err");
}
//...Rest of function
关于可能缺少什么的任何想法?
【问题讨论】:
标签: flutter dart google-cloud-firestore stream