pickMedia method
Implementation
Future<List<PickedFile>> pickMedia({
required CloudMediaType type,
required int maxCount,
}) async {
if (maxCount > FileConstants.hardMaxSelection) {
throw CloudMediaSelectionLimitExceededException(
'Requested $maxCount exceeds hard limit of ${FileConstants.hardMaxSelection}.');
}
List<PickedFile> pickedFiles = [];
switch (type) {
case CloudMediaType.image:
final files = await _imagePicker.pickMultiImage(
limit: maxCount,
imageQuality: 100,
);
pickedFiles = files.map((f) => PickedFile(f.path)).toList();
break;
case CloudMediaType.video:
final file = await _imagePicker.pickVideo(source: ImageSource.gallery);
if (file != null) {
pickedFiles = [PickedFile(file.path)];
}
break;
case CloudMediaType.audio:
// file_picker 12.x: fully static, use pickFile for single, pickFiles for multiple
if (maxCount == 1) {
final result = await FilePicker.pickFile(type: FileType.audio);
if (result != null) pickedFiles = [PickedFile(result.path!)];
} else {
final result = await FilePicker.pickFiles(type: FileType.audio);
if (result != null) {
pickedFiles = result.paths.whereType<String>().map(PickedFile.new).toList();
}
}
break;
case CloudMediaType.file:
if (maxCount == 1) {
final result = await FilePicker.pickFile(
type: FileType.custom,
allowedExtensions: ['pdf'],
);
if (result != null) pickedFiles = [PickedFile(result.path!)];
} else {
final result = await FilePicker.pickFiles(
type: FileType.custom,
allowedExtensions: ['pdf'],
);
if (result != null) {
pickedFiles = result.paths.whereType<String>().map(PickedFile.new).toList();
}
}
break;
}
for (final file in pickedFiles) {
Validators.validateFileType(file.name);
final size = await file.length();
Validators.validateFileSize(size, type);
}
CloudLogger.info('Picked ${pickedFiles.length} ${type.displayName}(s)');
return pickedFiles;
}