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);
}