proceedWithCameraScan function

Future<CameraScanProceedResult> proceedWithCameraScan(
  1. BuildContext context, {
  2. required VoidCallback onScanGranted,
  3. required String permissionsExplanationKey,
  4. bool popDialogOnGranted = true,
})

Requests camera permission if needed, then runs onScanGranted. Pops context when granted when popDialogOnGranted is true.

Implementation

Future<CameraScanProceedResult> proceedWithCameraScan(
  BuildContext context, {
  required VoidCallback onScanGranted,
  required String permissionsExplanationKey,
  bool popDialogOnGranted = true,
}) async {
  final cameraStatus = await Permission.camera.status;
  if (cameraStatus.isDenied || cameraStatus.isPermanentlyDenied) {
    final requestCameraStatus = await Permission.camera.request();
    if (!context.mounted) return CameraScanProceedResult.denied;
    if (requestCameraStatus.isGranted) {
      if (popDialogOnGranted) Navigator.of(context).pop();
      onScanGranted();
      return CameraScanProceedResult.granted;
    }
    if (requestCameraStatus.isDenied) {
      return CameraScanProceedResult.denied;
    }
    if (requestCameraStatus.isPermanentlyDenied) {
      _showCameraPermissionExplanationDialog(
        context,
        permissionsExplanationKey: permissionsExplanationKey,
      );
      return CameraScanProceedResult.permanentlyDenied;
    }
  } else if (cameraStatus.isGranted) {
    onScanGranted();
    if (popDialogOnGranted && context.mounted) {
      Navigator.of(context).pop();
    }
    return CameraScanProceedResult.granted;
  }
  return CameraScanProceedResult.denied;
}