Flutter 在颤振中,未来如何使用零安全?

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

我正试图迁移到零安全的颤振。以下将ImageProvider转换为ByteData的代码片段在没有空安全性的情况下运行良好

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();
 });