我需要为一个函数生成一个列表;然而,我希望从回调函数中生成列表,而此回调函数位于主函数内部 - 这会导致yield语句不会在主函数中执行,而是在回调函数中执行。我的问题与此处解决的问题非常相似:Dart Component: How to return result of asynchronous callback? ,但由于我需要使用yield而不是return,因此无法使用Completer。下面的代码应该更好地描述了这个问题:
Stream<List<EventModel>> fetchEvents() async* { //function [1]
Firestore.instance
.collection('events')
.getDocuments()
.asStream()
.listen((snapshot) async* { //function [2]
List<EventModel> list = List();
snapshot.documents.forEach((document) {
list.add(EventModel.fromJson(document.data));
});
yield list; //This is where my problem lies - I need to yield for function [1] not [2]
});
}
await for
,但这解决了我的问题。 - Marcus Bornman