pickMultiImagesAsXFiles method

Future<List<XFile>> pickMultiImagesAsXFiles({
  1. int? maxImages,
  2. bool requestFullMetadata = true,
})

Cross-platform multi pick using XFile (works on web when using file_picker).

If features.webFilePicker enables WebFilePickerFeatureConfig.useFilePickerForMultiPick, uses file_picker (web/desktop friendly). Otherwise uses ImagePicker.pickMultiImage.

Implementation

Future<List<XFile>> pickMultiImagesAsXFiles({
  int? maxImages,
  bool requestFullMetadata = true,
}) async {
  final useFp = features?.webFilePicker != null &&
      features!.webFilePicker!.enabled &&
      features!.webFilePicker!.useFilePickerForMultiPick;

  if (useFp) {
    final result = await FilePicker.platform.pickFiles(
      type: FileType.image,
      allowMultiple: true,
      withData: features!.webFilePicker!.withData || kIsWeb,
    );
    if (result == null || result.files.isEmpty) return [];

    final out = <XFile>[];
    for (final p in result.files) {
      if (p.bytes != null) {
        out.add(XFile.fromData(p.bytes!, name: p.name, mimeType: 'image/*'));
      } else if (p.path != null) {
        out.add(XFile(p.path!));
      }
    }
    if (maxImages != null && out.length > maxImages) {
      return out.take(maxImages).toList();
    }
    return out;
  }

  final picked = await _picker.pickMultiImage(
    limit: maxImages,
    requestFullMetadata: requestFullMetadata,
  );
  return picked;
}