From ddd55e18a1a9a5b0f803f814493895b8c1a2ac8c Mon Sep 17 00:00:00 2001 From: Luis Thein Date: Thu, 18 Jul 2019 08:50:52 +0200 Subject: [PATCH] Added methods for pausing/resuming camera --- .../net/touchcapture/qr/flutterqr/QRView.kt | 17 ++++++++++++ example/lib/main.dart | 26 ++++++++++++++++++- ios/Classes/QRView.swift | 20 ++++++++++++++ lib/qr_code_scanner.dart | 11 ++++++-- 4 files changed, 71 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 b3b6e70..8a7aa37 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt @@ -87,6 +87,17 @@ class QRView(private val registrar: PluginRegistry.Registrar, id: Int) : barcodeView?.resume() } + private fun pauseCamera() { + if (barcodeView!!.isPreviewActive) { + barcodeView?.pause() + } + } + + private fun resumeCamera() { + if (!barcodeView!!.isPreviewActive) { + barcodeView?.resume() + } + } override fun getView(): View { return initBarCodeView()?.apply { @@ -147,6 +158,12 @@ class QRView(private val registrar: PluginRegistry.Registrar, id: Int) : "flipFlash" -> { flipFlash() } + "pauseCamera" -> { + pauseCamera() + } + "resumeCamera" -> { + resumeCamera() + } } } diff --git a/example/lib/main.dart b/example/lib/main.dart index 00db09e..6f48ea3 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -85,7 +85,31 @@ class _QRViewExampleState extends State { ), ) ], - ) + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.only(bottom: 8.0), + child: RaisedButton( + onPressed: () { + controller?.pauseCamera(); + }, + child: Text('pause', style: TextStyle(fontSize: 20)), + ), + ), + Container( + margin: EdgeInsets.only(bottom: 8.0), + child: RaisedButton( + onPressed: () { + controller.resumeCamera(); + }, + child: Text('resume', style: TextStyle(fontSize: 20)), + ), + ) + ], + ), ], ), flex: 1, diff --git a/ios/Classes/QRView.swift b/ios/Classes/QRView.swift index 76384b8..134db76 100644 --- a/ios/Classes/QRView.swift +++ b/ios/Classes/QRView.swift @@ -50,6 +50,10 @@ public class QRView:NSObject,FlutterPlatformView { self?.flipCamera() case "flipFlash": self?.flipFlash() + case "pauseCamera": + self?.pauseCamera() + case "resumeCamera": + self?.resumeCamera() default: result(FlutterMethodNotImplemented) return @@ -79,4 +83,20 @@ public class QRView:NSObject,FlutterPlatformView { } } } + + func pauseCamera() { + if let sc: MTBBarcodeScanner = scanner { + if sc.isScanning() { + sc.freezeCapture() + } + } + } + + func resumeCamera() { + if let sc: MTBBarcodeScanner = scanner { + if !sc.isScanning() { + sc.unfreezeCapture() + } + } + } } diff --git a/lib/qr_code_scanner.dart b/lib/qr_code_scanner.dart index 7c463a4..4325376 100644 --- a/lib/qr_code_scanner.dart +++ b/lib/qr_code_scanner.dart @@ -83,12 +83,19 @@ class QRViewController { } } - void flipCamera(){ + void flipCamera() { channel.invokeMethod("flipCamera"); } - void flipFlash(){ + void flipFlash() { channel.invokeMethod("flipFlash"); } + void pauseCamera() { + channel.invokeMethod("pauseCamera"); + } + + void resumeCamera() { + channel.invokeMethod("resumeCamera"); + } }