我是第一次尝试 Dart,但我无法让错误处理为我工作。这里有一些关于它的信息。
资源:
- HTML、CSS 和 Dart 的要点:gist.github.com/enjikaka/8164610
- 项目压缩包:ge.tt/6StW4cB1/v/0?c
- CodePen 上的 JavaScript 版本:codepen.io/enjikaka/pen/giurk
我想要它:
如果图像源返回 403 错误代码,则创建 MinecraftSkin 实例应引发 StateError。应在尝试创建 MineCraft 皮肤实例的 generateHead() 函数中处理异常。
它是怎样的:
如果代表 MineCraft 播放器皮肤的图像不存在(当图像源不存在并返回 403 时)代码在第 22 行停止(onError;我抛出 StateError)并打印到控制台“Breaking on exception: Bad状态:用户没有皮肤”。
但是,在 generateHead 的捕获中,没有执行任何操作。当我提示它时,它不会打印 StateError 消息,也不会将 StateError 消息插入 DOM 中的选定元素。
代码
import 'dart:html';
class MinecraftSkin {
String user;
CanvasElement ce = new CanvasElement();
void _generateCanvas(Event e) {
CanvasRenderingContext2D ctx = ce.getContext('2d');
ctx.imageSmoothingEnabled = false;
ctx.drawImageScaledFromSource((e.target as ImageElement),8,8,8,8,0,0,ce.width,ce.height);
}
CanvasImageSource getHead() => ce;
String name() => user;
MinecraftSkin(String minecraftUser, num size) {
user = (minecraftUser == null) ? 'Notch' : minecraftUser;
ce.width = size;
ce.height = size;
ImageElement img = new ImageElement()
..onLoad.listen(_generateCanvas)
..onError.listen((_) => throw new StateError('User has no skin'));
img.src = "http://s3.amazonaws.com/MinecraftSkins/"+user+".png";
}
}
void generateHead(Event e) {
MinecraftSkin ms;
try {
ms = new MinecraftSkin((querySelector('#userName') as InputElement).value, 128);
} on StateError catch(se) {
print(se.message);
querySelector('#status').text = se.message;
}
CanvasElement cems = ms.getHead();
cems.id = "mc" + ms.name();
cems.title = "mc" + ms.name();
document.body.append(cems);
querySelector('#status').text = "Got head!";
}
void main() {
querySelector('#generateHead').onClick.listen(generateHead);
}
提前致谢!
真诚的,杰里米