requestPermissionWithRationale static method

Future<bool> requestPermissionWithRationale(
  1. BuildContext context,
  2. Permission permission, {
  3. String title = 'Permission Required',
  4. String message = 'This app needs permission to function properly.',
  5. String positiveText = 'Grant',
  6. String negativeText = 'Deny',
})

Request permission with rationale dialog

Implementation

static Future<bool> requestPermissionWithRationale(
  BuildContext context,
  Permission permission, {
  String title = 'Permission Required',
  String message = 'This app needs permission to function properly.',
  String positiveText = 'Grant',
  String negativeText = 'Deny',
}) async {
  // Check if permission is already granted
  if (await isPermissionGranted(permission)) {
    return true;
  }

  // Show rationale dialog
  final shouldRequest = await showDialog<bool>(
    context: context,
    builder: (context) => AlertDialog(
      title: Text(title),
      content: Text(message),
      actions: [
        TextButton(
          onPressed: () => Navigator.of(context).pop(false),
          child: Text(negativeText),
        ),
        TextButton(
          onPressed: () => Navigator.of(context).pop(true),
          child: Text(positiveText),
        ),
      ],
    ),
  );

  if (shouldRequest == true) {
    return await permission.request().isGranted;
  }

  return false;
}