dart 将对象转换为可编码对象失败:“Future”的示例< dynamic>

yc0p9oo0  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(111)

我试图从图像文件中获取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>'


如果我不使用future,它会直接传递到下一步,而不会转换为base64 String。转换通常需要时间。

4szc88ey

4szc88ey1#

变量fileImage似乎与传递给函数的变量file不匹配。这可能是导致问题的原因吗?
我很好奇为什么需要在String上调用await-这似乎是不必要的。错误可能是由于如何调用convertBase64()造成的。对于Future<T>这样的JavaScript方法,我建议这样调用它:

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

字符串
此外,正如前面在评论中所建议的,最好使用Uri.dataFromBytes(),而不是自己解析编码的String。

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

相关问题