proceedWithCameraScan function
- BuildContext context, {
- required VoidCallback onScanGranted,
- required String permissionsExplanationKey,
- 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;
}