openGallery static method
Future<CroppedFile?>
openGallery(
)
Implementation
static Future<CroppedFile?> openGallery() async {
PermissionStatus status;
String deniedMessage = '';
String permanentlyDeniedMessage = '';
if (Platform.isIOS) {
// iOS: Always request photos permission
status = await Permission.photos.request();
deniedMessage = 'Permissão de acesso à galeria negada.';
permanentlyDeniedMessage =
'Permissão de acesso à galeria negada permanentemente.';
} else if (Platform.isAndroid) {
final androidInfo = await DeviceInfoPlugin().androidInfo;
// Android: Check version and request appropriate permission
// var release = androidInfo.version.release;
final sdkInt = androidInfo.version.sdkInt;
if (sdkInt <= 32) {
// Android <= 12: Request storage permission
status = await Permission.storage.request();
deniedMessage = 'Permissão de acesso ao armazenamento negada.';
permanentlyDeniedMessage =
'Permissão de acesso ao armazenamento negada permanentemente.';
} else {
// Android > 12: No permission needed, proceed directly
status = PermissionStatus.granted;
deniedMessage = 'Permissão de acesso à galeria negada.';
permanentlyDeniedMessage =
'Permissão de acesso à galeria negada permanentemente.';
}
} else {
// Other platforms: Default to photos permission
status = await Permission.photos.request();
deniedMessage = 'Permissão de acesso à galeria negada.';
permanentlyDeniedMessage =
'Permissão de acesso à galeria negada permanentemente.';
}
if (status.isDenied || status.isPermanentlyDenied) {
GrxToastService.showError(
message:
status.isPermanentlyDenied
? permanentlyDeniedMessage
: deniedMessage,
actions: [
GrxToastAction(
label: 'Abrir Configurações',
icon: Icons.settings,
onPressed: () => openAppSettings(),
),
],
);
return null;
}
final image = await _picker.pickImage(source: ImageSource.gallery);
if (image == null) return null;
return cropImage(image.path);
}