pickImages method

  1. @override
Future<List<AdaptiveFile>> pickImages(
  1. PickerOptions options
)
override

Picks one or more images from the device gallery/photo picker.

Implementation

@override
Future<List<AdaptiveFile>> pickImages(PickerOptions options) async {
  final extensions = <String>[
    'jpg',
    'jpeg',
    'png',
    'webp',
    'gif',
    'bmp',
    'heic',
    'heif',
  ];

  if (options.mediaType == MediaType.video) {
    extensions.addAll(['mp4', 'mov', 'avi', 'mkv']);
  } else if (options.mediaType == MediaType.all) {
    extensions.addAll(['mp4', 'mov', 'avi', 'mkv']);
  }

  final typeGroup = XTypeGroup(
    label: options.mediaType == MediaType.video
        ? 'Videos'
        : (options.mediaType == MediaType.all ? 'Media Files' : 'Images'),
    extensions: extensions,
  );

  if (options.isMultiple) {
    final files = await openFiles(acceptedTypeGroups: [typeGroup]);
    if (files.isEmpty) return [];

    final List<AdaptiveFile> results = [];
    for (final file in files) {
      final bytes = await file.readAsBytes();
      results.add(
        AdaptiveFile.fromBytes(
          bytes,
          name: file.name,
          mimeType: file.mimeType,
          size: await file.length(),
          lastModified: await file.lastModified(),
        ).copyWith(path: file.path),
      );
    }
    return results;
  } else {
    final file = await openFile(acceptedTypeGroups: [typeGroup]);
    if (file == null) return [];

    final bytes = await file.readAsBytes();
    return [
      AdaptiveFile.fromBytes(
        bytes,
        name: file.name,
        mimeType: file.mimeType,
        size: await file.length(),
        lastModified: await file.lastModified(),
      ).copyWith(path: file.path),
    ];
  }
}