Dart / Flutter-回调函数中的“收益”

我需要提供一个功能列表;但是,我想从回调函数中产生列表,该回调函数本身在主函数内部-这导致yield语句不是针对主函数执行,而是针对回调函数执行。

我的问题与此处解决的问题非常相似:Dart组件:如何返回异步回调的结果?但是我不能使用完成器,因为我需要屈服而不返回。

下面的代码应更好地描述问题:

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]

});

}

回答:

代替使用.listen哪个函数处理另一个函数await for内部的事件,可以使用它来处理外部函数内部的事件。

单独地-当您产生List仍在内部流回调中填充的实例时,您可能想重新考虑该模式…

Stream<List<EventModel>> fetchEvents() async* {

final snapshots =

Firestore.instance.collection('events').getDocuments().asStream();

await for (final snapshot in snapshots) {

// The `await .toList()` ensures the full list is ready

// before yielding on the Stream

final events = await snapshot.documents

.map((document) => EventModel.fromJson(document.data))

.toList();

yield events;

}

}

以上是 Dart / Flutter-回调函数中的“收益” 的全部内容, 来源链接: utcz.com/qa/419159.html

回到顶部