我在此之前发布了一个问题(How to load an image in Dart)并得到了答案,但同时又有了更多问题。 为什么我只能这样绘制图像:
image.on.load.add((e) {
context.drawImage(image, 0, 0);
});
但如果我写的是:
ImageElement image = new ImageElement();
image.src = 'myImage.png';
context.drawImage(image, 0, 0);
^^^这不起作用,不画图像。为什么呢?
bool loaded = false;
ImageElement image = new ImageElement();
image.src = 'myImage.png';
image.on.load.add((e) {
loaded = true;
});
print(loaded); // on console get - false
^^^为什么我会弄错?如果加载的图像加载变量变为真,我就会创建,但加载不会变为真。
抱歉我的英语不好。谢谢!
答案 0 :(得分:6)
至于你的第一个问题,如果你遗漏了
image.onLoad.listen((e) {
context.drawImage(image, 0, 0);
});
然后加载图像时不会执行任何代码。
on.load.add(...)构造基本上分配了一个在浏览器加载图像时执行的函数(通常称为处理程序)。如果没有分配这样的功能,那么在加载图像时没有任何反应,因此 context.drawImage(image,0,0)将不起作用。
您的第二个问题与此功能有关。加载图像是一个异步过程,这意味着当客户端成功加载图像时,首先会触发加载处理程序( on.load.add(...))。这意味着在协助您的加载处理程序后,继续执行下一次调用:打印(加载),由于图像尚未加载,因此将为false。
答案 1 :(得分:5)
较新的图像onload语法:
readFile() {
ImageElement image = new ImageElement(src: "plant.png");
document.body.nodes.add(image);
image.onLoad.listen(
onData,
onError: onError,
onDone: onDone,
cancelOnError: true
);
}
onData(Event e) {
print("success");
}
onError(Event e) {
print("error: $e");
}
onDone() {
print("done");
}