簡體   English   中英

將對象轉換為可編碼對象失敗:“未來”實例<dynamic> &#39;

[英]Converting object to an encodable object failed: Instance of 'Future<dynamic>'

我正在嘗試從圖像文件中獲取 base64 字符串。 當我使用以下方法時

Future convertBase64(file) async{
    List<int> imageBytes = fileImage.readAsBytesSync();
    String base64Image = await 'data:image/png;base64,' + base64Encode(imageBytes);
//    print('length of image bytes ${base64Image.length}');
    return base64Image;
  }

它向我顯示了一個錯誤:

exception---- Converting object to an encodable object failed: Instance of 'Future<dynamic>'

如果我在沒有未來的情況下使用它直接傳遞到下一步而不轉換為 base64 字符串。 轉換通常需要時間。

變量fileImage似乎與傳遞給函數的變量file不匹配。 這可能是導致問題的原因嗎?

我很好奇為什么需要在String上調用await - 這似乎是不必要的。 錯誤可能是由調用convertBase64()方式引起的。 對於像Future<T>這樣的異步方法,我建議這樣稱呼它:

convertBase64(imageFile).then((String base64Image) {
  // Handle base64Image 
});

此外,正如之前在評論中所建議的,最好使用Uri.dataFromBytes()而不是您自己解析編碼的字符串。

Future<String> convertBase64(File file) async{
  List<int> imageBytes = file.readAsBytesSync();
  return Uri.dataFromBytes(imageBytes, mimeType: "image/png").toString();
}

暫無
暫無

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

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