首页 > 解决方案 > 如何从 Dart 中的期货列表中异步流式传输加载的对象

问题描述

我有一个可以通过调用函数 object.load() 加载的对象列表。此函数异步返回同一对象的加载版本。我想同时调用列表中所有对象的 load() 函数,并在加载完成后立即流式传输加载的版本。下面的代码有效,但程序一次加载一个对象。

发件人:

Stream<ImageIconModel> streamLoadedIcons() async* {
    for (var i = 0; i < imageIconModels.length; i++) {
      yield await imageIconModels[i].load().then((loadedIconModel) {
        return loadedIconModel;
      });
    }
  }

接收者:

    await for (var loadedIcon in streamLoadedIcons()) {
     final var result = doSomething(loadedIcon);
     yield result;
    }

主要问题是:在发送者中,如果我等待每个 load() 调用,它将执行循环中的每一步,等待 load() 完成。但是,如果我删除“等待”,我将返回一个未来,而不是加载的图标。

标签: flutterdartasynchronousstreamfuture

解决方案


你需要Stream.fromFutures.

final loadedIconModelStream = Stream.fromFutures([
  for (final iconModel in imageIconModels) iconModel.load(),
]);

推荐阅读