Flutter 如何从Dart中的未来列表异步流式传输加载的对象
我有一个可以通过调用函数object.load()加载的对象列表。 此函数异步返回同一对象的加载版本。 我希望同时调用列表中所有对象的load()函数,并在加载完成后立即对加载的版本进行流式处理。 下面的代码可以工作,但程序一次加载一个对象 发件人:Flutter 如何从Dart中的未来列表异步流式传输加载的对象,flutter,dart,asynchronous,stream,future,Flutter,Dart,Asynchronous,Stream,Future,我有一个可以通过调用函数object.load()加载的对象列表。 此函数异步返回同一对象的加载版本。 我希望同时调用列表中所有对象的load()函数,并在加载完成后立即对加载的版本进行流式处理。 下面的代码可以工作,但程序一次加载一个对象 发件人: Stream<ImageIconModel> streamLoadedIcons() async* { for (var i = 0; i < imageIconModels.length; i++) { yi
Stream<ImageIconModel> streamLoadedIcons() async* {
for (var i = 0; i < imageIconModels.length; i++) {
yield await imageIconModels[i].load().then((loadedIconModel) {
return loadedIconModel;
});
}
}
主要问题是:
在发送器中,如果我等待每次load()调用,它将执行循环中的每一步,等待load()完成。
但是如果我删除“等待”,我将返回一个未来,而不是加载的图标。您需要的
final loadedIconModelStream=Stream.fromFutures([
对于(imageIconModels中的最终iconModel)iconModel.load(),
]);
两个@hacker1024和@pskink的答案都成功地回答了我的问题!
但这两个都没有达到预期的效果,我想我发现了原因
我将load()方法替换为Future.delayed(duration:random),然后程序按预期工作
因此,我认为可能是我用来加载图像的库(multi_image_picker:^4.7.14)正在同步访问电话文件。
因此,即使我尝试同时加载每个图像,它也会同步执行任务,并按照我调用的加载顺序返回每个图像
谢谢你们的回答 像这样的<代码>ctrl=StreamController();imageIconModels.forEach((i)=>i.load().then(ctrl.add));返回ctrl.stream代码>谢谢你的帮助@pskink!但是
ctrl.stream
返回\u ControllerStream
而不是流
。我将更多地研究类似的方法,看看是否可以使其工作或将其转换为正确的类型。ctrl=StreamController()代码>
await for (var loadedIcon in streamLoadedIcons()) {
final var result = doSomething(loadedIcon);
yield result;
}