我试图将本地资产图像加载到ui.Image对象中 . 但是ui.Image是一个抽象类 . 我基本上有这个:
import 'dart:ui' as ui;
class MyImage implements ui.Image{
int height;
int width;
MyImage(String file){
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
@override
String toString() {
// TODO: implement toString
return super.toString();
}
}
使用带有函数定义的代码 . 错误在'ui.Image image = await loadImage(img); 'await带有加下划线的红色,工具提示是'未定义的名称'await'在函数体中未标记为异步 .
class TrialApp extends StatefulWidget {
@override
_TrialAppState createState() => new _TrialAppState();
}
class _TrialAppState extends State<TrialApp> {
NodeWithSize rootNode;
@override
void initState() {
// TODO: implement initState
super.initState();
rootNode = new NodeWithSize(new Size(400.0, 400.0));
}
@override
Widget build(BuildContext context) {
// define a function that converts the I.Image object into ui.Image
//object
Future<ui.Image> loadImage(I.Image img) async {
final Completer<ui.Image> imageCompleter = new Completer();
ui.decodeImageFromList(img.getBytes(), (ui.Image img) {
imageCompleter.complete(img);
});
return imageCompleter.future;
}
// Obtain a `I.Image` object from the image file
I.Image img = I.decodeImage(new io.File('images/tile.png').readAsBytesSync());
// Obtain the `ui.Image` from the `I.Image` object
ui.Image image = await loadImage(img);
Sprite myButton = new Sprite.fromImage(image);
rootNode.addChild(myButton);
return new SpriteWidget(rootNode);
}
}
2 回答
如果您使用的是SpriteWidget,则可以使用
ImageMap
类加载图像以保存一些代码 . 从SpriteWidget docuementation:首先使用rootBundle从assetbundle获取图像 . 将获得的
ByteData
转换为List<int>
. 现在,您可以使用decodeImageFromList
方法获取ui.Image
.例:
希望有所帮助!