Flutter 颤振未来:等待侦听器至少完成一次
我试图在包含侦听器的函数上实现未来的返回。我希望在监听器至少返回一次数据时完成此操作。我没有使用async/await,因为listen函数不是未来的功能。因此,我的选择如下:Flutter 颤振未来:等待侦听器至少完成一次,flutter,dart,google-cloud-firestore,stream,Flutter,Dart,Google Cloud Firestore,Stream,我试图在包含侦听器的函数上实现未来的返回。我希望在监听器至少返回一次数据时完成此操作。我没有使用async/await,因为listen函数不是未来的功能。因此,我的选择如下: static Future listenForConsumption() async { Completer completer = Completer(); try { kConsumptionCollection .where("userId", isEqualTo:
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;
}
通过使用补全符,我试图等到侦听器完成。但是,调用此函数的函数似乎并不等待将来完成:
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
有没有关于可能缺少什么的想法?使用以下方法:
static void listenForConsumption(
{ @required Function onComplete,
@required Function onError,
}) async {
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();
onComplete(consumptionList);
},
);
} catch (err) {
onError(err);
}
}