Сохранение изображений во Flutter: подробное руководство с примерами кода

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

  1. Сохранение изображения из галереи.
    Чтобы сохранить изображение, выбранное из галереи устройства, выполните следующие действия:

Пример кода:

import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
Future<void> saveImageFromGallery() async {
  final picker = ImagePicker();
  final pickedFile = await picker.getImage(source: ImageSource.gallery);

  if (pickedFile != null) {
    final directory = await getApplicationDocumentsDirectory();
    final path = '${directory.path}/image.jpg';

    final file = File(pickedFile.path);
    final savedImage = await file.copy(path);

    // Print the saved image path
    print('Image saved at: ${savedImage.path}');
  }
}

Объяснение:

  • Мы используем пакет ImagePickerдля выбора изображения из галереи устройства.
  • После получения изображения мы получаем каталог документов приложения с помощью пакета path_provider.
  • Мы определяем желаемый путь для сохраненного изображения и создаем объект Fileс путем выбранного изображения.
  • Наконец, мы используем метод copy()для сохранения изображения в указанном каталоге.
  1. Захват и сохранение изображения с камеры.
    Чтобы сделать снимок с помощью камеры устройства и сохранить его, выполните следующие действия:

Пример кода:

import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
Future<void> captureAndSaveImage() async {
  final picker = ImagePicker();
  final pickedFile = await picker.getImage(source: ImageSource.camera);

  if (pickedFile != null) {
    final directory = await getApplicationDocumentsDirectory();
    final path = '${directory.path}/image.jpg';

    final file = File(pickedFile.path);
    final savedImage = await file.copy(path);

    // Print the saved image path
    print('Image saved at: ${savedImage.path}');
  }
}

Объяснение:

  • Подобно сохранению изображения из галереи, мы используем пакет ImagePickerдля захвата изображения с помощью камеры устройства.
  • Затем код приступает к сохранению изображения, используя те же шаги, что и раньше, путем указания желаемого пути и копирования файла изображения.
  1. Сохранение сетевых изображений.
    Чтобы сохранить изображение по сетевому URL-адресу, вы можете использовать пакет http, чтобы загрузить изображение и сохранить его локально.

Пример кода:

import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
import 'dart:io';
Future<void> saveNetworkImage(String imageUrl) async {
  final response = await http.get(Uri.parse(imageUrl));

  if (response.statusCode == 200) {
    final directory = await getApplicationDocumentsDirectory();
    final path = '${directory.path}/image.jpg';

    final file = File(path);
    await file.writeAsBytes(response.bodyBytes);

    // Print the saved image path
    print('Image saved at: ${file.path}');
  }
}

Объяснение:

  • Мы используем пакет httpдля отправки запроса HTTP GET на указанный URL-адрес изображения.
  • Если код состояния ответа равен 200 (что указывает на успешный запрос), мы получаем каталог документов приложения и определяем желаемый путь.
  • Мы создаем объект Fileс указанным путем и сохраняем изображение с помощью метода writeAsBytes().

Сохранение изображений во Flutter может осуществляться различными способами, в зависимости от источника изображения. Будь то из галереи, камеры или сети, Flutter предоставляет удобные пакеты и API для выполнения операций по сохранению изображений. Следуя примерам кода, приведенным в этой статье, вы сможете эффективно сохранять изображения в своих приложениях Flutter.