diff --git a/ios/Classes/QRView.swift b/ios/Classes/QRView.swift index 20cedc8..971be1d 100644 --- a/ios/Classes/QRView.swift +++ b/ios/Classes/QRView.swift @@ -125,7 +125,11 @@ public class QRView:NSObject,FlutterPlatformView { arguments.forEach { arg in allowedBarcodeTypes.append( QRCodeTypes[arg]!) } - MTBBarcodeScanner.requestCameraPermission(success: { permissionGranted in + MTBBarcodeScanner.requestCameraPermission(success: { [weak self] permissionGranted in + guard let self = self else { return } + + self.channel.invokeMethod("onPermissionSet", arguments: permissionGranted) + if permissionGranted { do { try self.scanner?.startScanning(with: self.cameraFacing, resultBlock: { [weak self] codes in @@ -169,8 +173,8 @@ public class QRView:NSObject,FlutterPlatformView { }) } catch { - let error = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: nil) - return result(error) + let scanError = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: error) + result(scanError) } } else { let error = FlutterError(code: "cameraPermission", message: "Permission denied to access the camera", details: nil) diff --git a/lib/src/qr_code_scanner.dart b/lib/src/qr_code_scanner.dart index 67ee443..e716705 100644 --- a/lib/src/qr_code_scanner.dart +++ b/lib/src/qr_code_scanner.dart @@ -199,13 +199,9 @@ class QRViewController { case 'onPermissionSet': await getSystemFeatures(); // if we have no permission all features will not be avaible if (call.arguments != null) { - if (call.arguments as bool) { - _hasPermissions = true; - } else { - _hasPermissions = false; - } + _hasPermissions = call.arguments as bool; if (onPermissionSet != null) { - onPermissionSet(this, call.arguments as bool); + onPermissionSet(this, _hasPermissions); } } break;