From b17de675e99fee0cd8940b79b056c2f7d843779d Mon Sep 17 00:00:00 2001 From: Julian Steenbakker Date: Fri, 5 Feb 2021 09:14:53 +0100 Subject: [PATCH] Fixed iOS not disposing camera --- .../kotlin/net/touchcapture/qr/flutterqr/QRView.kt | 2 ++ ios/Classes/QRView.swift | 4 +++- lib/src/qr_code_scanner.dart | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt index 498911d..f9a6314 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt @@ -70,6 +70,8 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap flipCamera(result) "toggleFlash" -> toggleFlash(result) "pauseCamera" -> pauseCamera(result) + // Stopping camera is the same as pausing camera + "stopCamera" -> pauseCamera(result) "resumeCamera" -> resumeCamera(result) "requestPermissions" -> checkAndRequestPermission(result) "getCameraInfo" -> getCameraInfo(result) diff --git a/ios/Classes/QRView.swift b/ios/Classes/QRView.swift index af9be2c..aa7aa69 100644 --- a/ios/Classes/QRView.swift +++ b/ios/Classes/QRView.swift @@ -59,6 +59,8 @@ public class QRView:NSObject,FlutterPlatformView { self?.toggleFlash(result) case "pauseCamera": self?.pauseCamera(result) + case "stopCamera": + self?.stopCamera(result) case "resumeCamera": self?.resumeCamera(result) case "getCameraInfo": @@ -185,7 +187,7 @@ public class QRView:NSObject,FlutterPlatformView { } - func stopScan(_ result: @escaping FlutterResult){ + func stopCamera(_ result: @escaping FlutterResult){ MTBBarcodeScanner.requestCameraPermission(success: { permissionGranted in if permissionGranted { if let sc: MTBBarcodeScanner = self.scanner { diff --git a/lib/src/qr_code_scanner.dart b/lib/src/qr_code_scanner.dart index ea04c1e..ec28402 100644 --- a/lib/src/qr_code_scanner.dart +++ b/lib/src/qr_code_scanner.dart @@ -251,7 +251,7 @@ class QRViewController { } } - /// Pauses barcode scanning + /// Pauses the camera and barcode scanning Future pauseCamera() async { try { await _channel.invokeMethod('pauseCamera'); @@ -260,6 +260,15 @@ class QRViewController { } } + /// Stops barcode scanning and the camera + Future stopCamera() async { + try { + await _channel.invokeMethod('stopCamera'); + } on PlatformException catch (e) { + throw CameraException(e.code, e.message); + } + } + /// Resumes barcode scanning Future resumeCamera() async { try { @@ -280,8 +289,9 @@ class QRViewController { } } - /// Disposes the barcode stream. + /// Stops the camera and disposes the barcode stream. void dispose() { + stopCamera(); _scanUpdateController.close(); }