pickMultiImages method

Future<List<File>> pickMultiImages({
  1. required BuildContext context,
  2. int? maxImages,
  3. bool requestFullMetadata = true,
})

Picks multiple images from the gallery (iOS 14+; may be limited on older OS).

When features.webFilePicker is set with WebFilePickerFeatureConfig.useFilePickerForMultiPick, uses file_picker on non-web platforms. On web, prefer pickMultiImagesAsXFiles.

Implementation

Future<List<File>> pickMultiImages({
  required BuildContext context,
  int? maxImages,
  bool requestFullMetadata = true,
}) async {
  try {
    final useFp = features?.webFilePicker != null &&
        features!.webFilePicker!.enabled &&
        features!.webFilePicker!.useFilePickerForMultiPick &&
        !kIsWeb;

    if (useFp) {
      final result = await FilePicker.platform.pickFiles(
        type: FileType.image,
        allowMultiple: true,
        withData: false,
      );
      if (result == null || result.files.isEmpty) {
        files = [];
        return [];
      }
      final list = <File>[];
      for (final p in result.files) {
        final path = p.path;
        if (path != null) list.add(File(path));
      }
      if (maxImages != null && list.length > maxImages) {
        files = list.take(maxImages).toList();
      } else {
        files = list;
      }
    } else {
      final picked = await _picker.pickMultiImage(
        limit: maxImages,
        requestFullMetadata: requestFullMetadata,
      );

      if (picked.isEmpty) {
        files = [];
        return [];
      }

      files = picked.map((x) => File(x.path)).toList();
    }

    var result = files!;

    if (compressImage) {
      final compressed = <File>[];
      final params = compressParams ?? defaultCompress;
      for (final f in result) {
        final out = await compress(image: f, compressParams: params);
        compressed.add(out ?? f);
      }
      result = compressed;
    }

    files = result;
    return result;
  } catch (e, st) {
    debugPrint('Error picking multiple images: $e\n$st');
    files = [];
    return [];
  }
}