[英]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.