如何在Dart中链接多个ImageElement加载事件

如何在Dart中链接多个ImageElement加载事件,dart,Dart,我将JavaScript背景图像加载程序转换为Dart,有点像这样: 我用定时器检查图像是否全部加载。 这样行 但在Dart中有可链接的未来,我想知道你们是否可以链接 图像元素的背景加载 ImageElement a=新的ImageElement(); ImageElement b=新的ImageElement(); ImageElement c=新的ImageElement(); Future.wait([a.src='a.jpg',b.src='b.jpg',c.src='ca.jpg'])

我将JavaScript背景图像加载程序转换为Dart,有点像这样:

我用定时器检查图像是否全部加载。 这样行

但在Dart中有可链接的未来,我想知道你们是否可以链接 图像元素的背景加载

ImageElement a=新的ImageElement();
ImageElement b=新的ImageElement();
ImageElement c=新的ImageElement();
Future.wait([a.src='a.jpg',b.src='b.jpg',c.src='ca.jpg']))
。然后((列出响应)=>选择响应(响应))
.catchError((e)=>handleError(e));
当然,分配src和实际的图像加载是异步的,所以这不起作用

我还需要一些代码来执行每个图像一旦加载

也许我需要写我自己的FutureMageElement类,但我想我应该先问一下


有什么想法吗?

你真的需要为此与Futures合作吗

为什么不这样做呢:

列出文件=[“a”、“b”、“c”];
int imagesToLoad=files.length;
for(文件中的字符串文件名){
ImageElement pic=新的ImageElement()
..src=“$fileName.jpg”
…onLoad.listen((事件e){
//文件加载完毕后执行某些操作
图像加载--;
如果(imagesToLoad==0){
//加载所有图像后执行某些操作
}
})
;
}

当然,你可以使用期货。只需使用streams的
first
属性:

var a=newimageelement(src:'a.png');
var b=新的ImageElement(src:'b.png');
var c=新的ImageElement(src:'c.png');
var期货=[a.onLoad.first,b.onLoad.first,c.onLoad.first];
Future.wait(futures).then((u)=>print('done');

文本“完成”将在加载所有三个图像时打印。

这是一个很好的解决方案,但我想知道是否还有Dart“未来”方式。我注意到onLoad返回一个EventStreamProvider。我想知道我是否能用上它。我觉得这可以教我一些未来的高级用法,我怀疑这是可能的。