簡體   English   中英

在Flutter中,如何使用Null 未來安全?

[英]In Flutter, how to use Null Safety in Future?

我正在嘗試遷移到 Flutter 中的 Null 安全。 以下將 ImageProvider 轉換為 ByteData 的代碼片段在沒有 Null 安全的情況下可以正常工作。

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

啟用 Null 安全后,function toByteData 返回 Future<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;

}

    /*pass ImageProvider to above function */

ImageProvider provider=....

imgProvider2ByteData(provider).then((val) {
        var data = val!.buffer.asUint8List();
 });

當我運行它時,我收到以下錯誤:

圖像資源服務類型“Future<ByteData?>”捕獲的異常不是“FutureOr?”類型的子類型 '價值'

我一定是做錯了什么,但不知道如何在未來返回值上使用 Null Safety。 感謝任何幫助。

由於toByteData()返回Future<ByteData?> ,您還應該從您的方法中返回相同的內容。 嘗試這個:

Future<ByteData?> imgProvider2ByteData(ImageProvider img) async {
  var completer = Completer<ByteData?>();
  img.resolve(ImageConfiguration()).addListener(ImageStreamListener((ImageInfo info, bool _) {
    completer.complete(info.image.toByteData());
  }));
  return completer.future;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM