Не удалось преобразовать объект в кодируемый объект: экземпляр 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();
}
Другие вопросы по тегам