request static method

Future<bool> request(
  1. BuildContext context, {
  2. required Permission permission,
  3. required String rationaleTitle,
  4. required String rationaleMessage,
  5. required String settingsMessage,
  6. String continueLabel = 'Continuar',
  7. String cancelLabel = 'Ahora no',
  8. IconData rationaleIcon = Icons.info_outline_rounded,
  9. String settingsTitle = 'Habilitá el permiso en Ajustes',
  10. String settingsActionLabel = 'Abrir ajustes',
})

Implementation

static Future<bool> request(
  BuildContext context, {
  required Permission permission,
  required String rationaleTitle,
  required String rationaleMessage,
  required String settingsMessage,
  String continueLabel = 'Continuar',
  String cancelLabel = 'Ahora no',
  IconData rationaleIcon = Icons.info_outline_rounded,
  String settingsTitle = 'Habilitá el permiso en Ajustes',
  String settingsActionLabel = 'Abrir ajustes',
}) async {
  final status = await permission.status;
  if (status.isGranted || status.isLimited) return true;

  if (!context.mounted) return false;

  if (status.isPermanentlyDenied) {
    await GpModal.showAlert(
      context: context,
      title: settingsTitle,
      message: settingsMessage,
      buttonText: settingsActionLabel,
      onPressed: openAppSettings,
      icon: Icons.settings_outlined,
    );
    return false;
  }

  var proceed = false;
  await GpModal.showConfirm(
    context: context,
    title: rationaleTitle,
    message: rationaleMessage,
    confirmText: continueLabel,
    cancelText: cancelLabel,
    icon: rationaleIcon,
    onConfirm: () => proceed = true,
  );

  if (!proceed) return false;

  final result = await permission.request();
  return result.isGranted || result.isLimited;
}