Не удалось преобразовать объект в кодируемый объект: экземпляр 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 String. Обычно требуется время для преобразования.
1 ответ
Переменная
fileImage
похоже, не соответствует переменной
file
передается в функцию. Может ли это быть причиной проблемы?
Мне любопытно, зачем нужно звонить
await
на
String
- в этом нет необходимости. Ошибка может быть вызвана тем, как
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();
}