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

Как правильно сохранить Image на устройстве, где изображение не взято из галереи или камеры?

В PageA есть кнопка камеры, позволяющая пользователю захватывать изображение. Как только изображение захвачено, оно будет go в PageB (EditImagePage). Как только пользователь завершит редактирование изображения, он вернется на страницу A и сохранит изображение на устройстве.

PageA

  @override
  userImage(File images) async {  // when user has captured image, it will run this code
    if (images != null) {
      Image image = await Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => EditImagePage(images.path), // go to edit image page
          ));
         // convert image to File
         // call copyImage function
    } else {

    }
  }

PageB

 IconButton(
          icon: Icon(Icons.check),
          onPressed: () async {
            Uint8List bytes = await _controller.exportAsPNGBytes();
            var image = Image.memory(bytes);
            return Navigator.pop(context, image);  // bring Image back to PageA
          }),

Этот код используется для сохранения изображения на устройстве. Как можно изменить его на файл?

Future<File> copyImage(File image) async {
        var savedDir = await getApplicationDocumentsDirectory();
        String appDocPath = savedDir.path;
        var fileName = FileUtils.basename(image.path);
        return await image.copy('$appDocPath/' + '$fileName');
      }

1 Ответ

1 голос
/ 22 января 2020

Вы можете сохранить изображение во внутреннем хранилище устройства, преобразовать изображение, изображение активов в файл и сохранить в хранилище устройства.

Сначала получите путь к изображению, перейдите в файл и напишите AsBytes для изображения.

Вы можете написать код, как показано ниже:

import 'dart:async';
import 'dart:io';

import 'package:flutter/services.dart' show rootServices;
import 'package:path_provider/path_provider.dart';

Future<File> convertImageToFile(String imagePath) async {
  final byteData = await rootServices.load('assets/$imagePath');

  final file = File('${(await getTemporaryDirectory()).path}/$imagePath');
  await file.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

  return file;
}

Необходимо разрешение на доступ к хранилищу, не забывайте его.

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