Как преобразовать изображение в байт и снова преобразовать его в изображение во флаттере? - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь использовать плагин image_picker . Я могу получить изображение в виде файла с помощью этого плагина. Мне нужно преобразовать это изображение в байты и отправить в API. Поэтому я попытался использовать dart: convert для преобразования изображения в байтовую строку. Теперь, когда я декодирую, я получаю тип Uint8List . Как преобразовать это в файл и отобразить в Image.file () . Я не мог исходить отсюда. Может ли кто-нибудь помочь мне с этим.

подумайте, получаю ли я этот decodedBytes из ответа API, как я могу преобразовать их для отображения в виджете изображений

Это код, который я пробовал пока что.

var image = await ImagePicker.pickImage(source: ImageSource.camera);

    setState(() {
      imageURI = image;
      final bytes = image.readAsBytesSync();

      String img64 = base64Encode(bytes);
      print(bytes);
      print(img64);

      final decodedBytes = base64Decode(img64);
      print(decodedBytes);
      //consider i am getting this decodedBytes i am getting from a api response, how can i convert them to display in a Image widget 
    });

Я получаю эту ошибку, используя writeAsBytesSyn c () ,

Unhandled Exception: FileSystemException: Cannot open file, path = 'decodedimg.png'

1 Ответ

2 голосов
/ 29 апреля 2020

Вы получаете эту ошибку, потому что вы не можете писать в любое произвольное место в изолированной программной среде приложения. Вы можете использовать path_provider для поиска временного каталога.

Но в вашем случае просто используйте объект image, pickImage уже возвращает объект File, поэтому просто используйте Image.file(image)

Если вы хотите декодировать base64 во временный каталог, вы можете использовать:

import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;

Future<File> writeImageTemp(String base64Image, String imageName) async {
  final dir = await getTemporaryDirectory();
  await dir.create(recursive: true);
  final tempFile = File(path.join(dir.path, imageName));
  await tempFile.writeAsBytes(base64.decode(base64Image));
  return tempFile;
}

с pubspe c .yaml:

dependencies:
  path: ^1.6.0
  path_provider: ^1.6.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...