showMediaListPicker function
Future<List<ChosenMedia> ?>
showMediaListPicker(
- BuildContext context,
- FlutterMediaContentType<
Object> mediaType, { - required VoidCallback onLoading,
- VoidCallback? onPermissionsInitialized,
- FilesSelected? onSelected,
- FileChanged? onChange,
- int maxSelections = 1,
- double? cropAspectRatio,
- bool crop = true,
- bool preemptPermission = true,
- Set<
FileSourceType> ? sourceTypes, - MediaSelectFn imageSelector = Choosers.flutterFilePicker,
- dynamic extraOptions,
Implementation
Future<List<ChosenMedia>?> showMediaListPicker(
BuildContext context,
FlutterMediaContentType mediaType, {
required VoidCallback onLoading,
VoidCallback? onPermissionsInitialized,
FilesSelected? onSelected,
FileChanged? onChange,
int maxSelections = 1,
double? cropAspectRatio,
bool crop = true,
bool preemptPermission = true,
Set<FileSourceType>? sourceTypes,
MediaSelectFn imageSelector = Choosers.flutterFilePicker,
dynamic extraOptions,
}) async {
final permission = await checkAndRequestPermissions(
context,
title: (intl) => intl!.permissionRequestPhotos,
permission: Permission.photos,
preemptPermission: preemptPermission,
);
switch (permission) {
case SunnyPermissionStatus.rejected:
SunnyHud.notification(
context, "You haven't granted access to your photos.",
isDismissible: true, onTap: (_, en) {
openAppSettings();
en?.dismiss();
});
break;
case SunnyPermissionStatus.granted:
try {
onPermissionsInitialized?.call();
var start = DateTime.now();
final files = await imageSelector(
context,
maxSelections: maxSelections,
onLoading: () {},
sourceTypes: sourceTypes,
mediaType: mediaType,
extraOptions: extraOptions,
);
var end = DateTime.now();
if (crop == true && files.length == 1 && files.first.file != null) {
final imageFile = files.first.file;
onChange?.call(imageFile, false);
final cropPt = await ((infoX.isIOS || infoX.isAndroid)
? Croppers.cropNative(context, imageFile!,
cropAspectRatio: cropAspectRatio)
: Croppers.cropFallback(context, imageFile!,
cropAspectRatio: cropAspectRatio));
// Upload new image
onChange?.call(cropPt, true);
return [ChosenMedia.ofFile(cropPt)];
}
_log.info("Took ${end.difference(start)} to pick");
onSelected?.call(files);
return files;
} on NoImagesSelectedException {
return [];
}
case SunnyPermissionStatus.later:
return [];
}
return null;
}