handlePermissionRequest static method

Future<bool> handlePermissionRequest(
  1. BuildContext context,
  2. Permission permission, {
  3. String title = 'Permission Required',
  4. String rationaleMessage = 'This app needs permission to function properly.',
  5. String deniedMessage = 'Permission was denied. Please enable it in settings.',
  6. String permanentlyDeniedMessage = 'Permission is permanently denied. Please enable it in settings.',
  7. bool showRationale = true,
})

Handle permission request with comprehensive flow

Implementation

static Future<bool> handlePermissionRequest(
  BuildContext context,
  Permission permission, {
  String title = 'Permission Required',
  String rationaleMessage = 'This app needs permission to function properly.',
  String deniedMessage =
      'Permission was denied. Please enable it in settings.',
  String permanentlyDeniedMessage =
      'Permission is permanently denied. Please enable it in settings.',
  bool showRationale = true,
}) async {
  // Check if already granted
  if (await isPermissionGranted(permission)) {
    return true;
  }

  // Show rationale if enabled
  if (showRationale) {
    final granted = await requestPermissionWithRationale(
      context,
      permission,
      title: title,
      message: rationaleMessage,
    );

    if (granted) return true;
  } else {
    // Direct request without rationale
    final granted = await permission.request().isGranted;
    if (granted) return true;
  }

  // Handle denied or permanently denied
  if (await isPermissionPermanentlyDenied(permission)) {
    await showPermissionDeniedDialog(
      context,
      title: title,
      message: permanentlyDeniedMessage,
    );
  } else if (await isPermissionDenied(permission)) {
    await showPermissionDeniedDialog(
      context,
      title: title,
      message: deniedMessage,
    );
  }

  return false;
}