showPhotoSelectionSheet<T extends Object> function
Future<List<XFile> >
showPhotoSelectionSheet<T extends Object>({
- required BuildContext context,
- PhotoSelectionL10n l10n = const PhotoSelectionL10n(),
- VoidCallback? onSettingAppOpenRequested,
- bool requestFullMetadata = false,
- bool allowMultiple = false,
- (List<
SheetAction< , ValueSetter<T> >T> )? additionalActions,
Implementation
Future<List<XFile>> showPhotoSelectionSheet<T extends Object>({
required BuildContext context,
PhotoSelectionL10n l10n = const PhotoSelectionL10n(),
VoidCallback? onSettingAppOpenRequested,
bool requestFullMetadata = false,
bool allowMultiple = false,
(List<SheetAction<T>>, ValueSetter<T>)? additionalActions,
}) async {
final source = await showModalActionSheet<Object>(
context: context,
title: l10n.title,
actions: [
SheetAction(
icon: Icons.perm_media,
label: l10n.chooseFromLibrary,
key: ImageSource.gallery,
),
SheetAction(
icon: Icons.camera_alt,
label: l10n.takePicture,
key: ImageSource.camera,
),
if (additionalActions != null) ...additionalActions.$1,
],
);
if (source == null) {
return [];
}
final picker = ImagePicker();
try {
if (source == ImageSource.gallery && allowMultiple) {
return await picker.pickMultiImage(
requestFullMetadata: requestFullMetadata,
);
} else if (source is ImageSource) {
final file = await picker.pickImage(
source: source,
requestFullMetadata: requestFullMetadata,
);
return file == null ? [] : [file];
} else if (source is T) {
additionalActions!.$2(source);
} else {
logger.warning('Invalid source type: $source');
}
} on PlatformException catch (e) {
logger.warning(e);
if (![
ImagePickerErrorCodes.cameraAccessRestricted,
ImagePickerErrorCodes.cameraAccessDenied,
ImagePickerErrorCodes.photoAccessRestricted,
ImagePickerErrorCodes.photoAccessDenied,
].contains(e.code)) {
// ignore: use_build_context_synchronously
showErrorDialog(context: context, error: e);
return [];
}
if (onSettingAppOpenRequested == null) {
return [];
}
const okKey = 'ok';
// ignore: use_build_context_synchronously
final result = await showModalActionSheet<String>(
context: context,
title: l10n.accessRestrictedTitle,
message: l10n.accessRestrictedMessage,
actions: [SheetAction(label: l10n.accessRestrictedOk, key: okKey)],
);
if (result == okKey) {
onSettingAppOpenRequested();
}
}
return [];
}