From b17de675e99fee0cd8940b79b056c2f7d843779d Mon Sep 17 00:00:00 2001 From: Julian Steenbakker Date: Fri, 5 Feb 2021 09:14:53 +0100 Subject: [PATCH 1/2] 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(); } From b70f8f04d07482e8cb2f48a24ff813c970bd9ea8 Mon Sep 17 00:00:00 2001 From: Julian Steenbakker Date: Fri, 5 Feb 2021 09:18:05 +0100 Subject: [PATCH 2/2] Changed deprecated RaisedButton to ElevatedButton --- example/lib/main.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 2cc42f9..c1674c4 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -56,7 +56,7 @@ class _QRViewExampleState extends State { children: [ Container( margin: EdgeInsets.all(8), - child: RaisedButton( + child: ElevatedButton( onPressed: () async { await controller?.toggleFlash(); setState(() {}); @@ -70,7 +70,7 @@ class _QRViewExampleState extends State { ), Container( margin: EdgeInsets.all(8), - child: RaisedButton( + child: ElevatedButton( onPressed: () async { await controller?.flipCamera(); setState(() {}); @@ -95,7 +95,7 @@ class _QRViewExampleState extends State { children: [ Container( margin: EdgeInsets.all(8), - child: RaisedButton( + child: ElevatedButton( onPressed: () async { await controller?.pauseCamera(); }, @@ -104,7 +104,7 @@ class _QRViewExampleState extends State { ), Container( margin: EdgeInsets.all(8), - child: RaisedButton( + child: ElevatedButton( onPressed: () async { await controller?.resumeCamera(); },