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 3871682..d741286 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt @@ -15,6 +15,7 @@ import com.journeyapps.barcodescanner.BarcodeResult import com.journeyapps.barcodescanner.BarcodeView import com.journeyapps.barcodescanner.DecoratedBarcodeView import io.flutter.plugin.common.BinaryMessenger +import com.journeyapps.barcodescanner.Size import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.PluginRegistry @@ -89,6 +90,7 @@ class QRView(messenger: BinaryMessenger,private val id: Int, private val params: "getCameraInfo" -> getCameraInfo(result) "getFlashInfo" -> getFlashInfo(result) "getSystemFeatures" -> getSystemFeatures(result) + "changeScanArea" -> changeScanArea(call.arguments as Double, result) else -> result.notImplemented() } } @@ -247,6 +249,17 @@ class QRView(messenger: BinaryMessenger,private val id: Int, private val params: } } + private fun changeScanArea(newSize: Double, result: MethodChannel.Result) { + setScanAreaSize(newSize, newSize) + result.success(true) + } + + private fun setScanAreaSize(dpScanAreaWidth: Double, dpScanAreaHeight: Double) { + barcodeView?.barcodeView?.framingRectSize = Size(convertDpToPixels(dpScanAreaWidth), convertDpToPixels(dpScanAreaHeight)) + } + + private fun convertDpToPixels(dp: Double) = (dp * barcodeView!!.context.resources.displayMetrics.density).toInt() + private fun hasCameraPermission(): Boolean { return permissionGranted || Build.VERSION.SDK_INT < Build.VERSION_CODES.M || diff --git a/lib/src/qr_code_scanner.dart b/lib/src/qr_code_scanner.dart index 2010755..fb8f799 100644 --- a/lib/src/qr_code_scanner.dart +++ b/lib/src/qr_code_scanner.dart @@ -341,6 +341,14 @@ class QRViewController { } on PlatformException catch (e) { throw CameraException(e.code, e.message); } + } else if (defaultTargetPlatform == TargetPlatform.android) { + final cutOutSize = overlay?.cutOutSize; + if (cutOutSize != null) { + await channel.invokeMethod( + 'changeScanArea', + cutOutSize, + ); + } } return false; }