Flutter 在颤振中,未来如何使用零安全?
我正试图迁移到零安全的颤振。以下将ImageProvider转换为ByteData的代码片段在没有空安全性的情况下运行良好Flutter 在颤振中,未来如何使用零安全?,flutter,future,dart-null-safety,Flutter,Future,Dart Null Safety,我正试图迁移到零安全的颤振。以下将ImageProvider转换为ByteData的代码片段在没有空安全性的情况下运行良好 static Future<ByteData> imgProvider2ByteData(ImageProvider img) async { Completer<ByteData> completer = new Completer<ByteData>(); img .resolve(new ImageConfiguration
static Future<ByteData> imgProvider2ByteData(ImageProvider img) async {
Completer<ByteData> completer = new Completer<ByteData>();
img
.resolve(new ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
completer.complete(info.image.toByteData(format: ui.ImageByteFormat.png));
}));
return completer.future;
启用空安全后,函数toByteData返回Future,因此我做了以下更改(添加了?on type和!on Future返回值):
当我运行它时,我得到了以下错误:
图像资源服务捕获到异常
类型“Future”不是“value”的“FutureOr”类型的子类型
我一定是做错了什么,但不知道如何在未来的返回值上使用空安全性。感谢您的帮助。由于toByteData()
返回一个未来
,因此您也应该从您的方法返回相同的值。试试这个:
未来imgProvider2ByteData(ImageProvider img)异步{
var completer=completer();
解析(ImageConfiguration()).addListener(ImageStreamListener((ImageInfo信息,bool)){
completer.complete(info.image.toByteData());
}));
返回completer.future;
}
///pass ImageProvider to above function
ImageProvider provider=....
imgProvider2ByteData(provider).then((val) {
var data = val.buffer.asUint8List();
});
static Future<ByteData?> imgProvider2ByteData(ImageProvider img) async {
Completer<ByteData?> completer = new Completer<ByteData>();
img
.resolve(new ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
completer.complete(info.image.toByteData(format: ui.ImageByteFormat.png));
}));
return completer.future;
/*pass ImageProvider to above function */
ImageProvider provider=....
imgProvider2ByteData(provider).then((val) {
var data = val!.buffer.asUint8List();
});