diff --git a/README.md b/README.md
index 973c25c..096e8cb 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,14 @@
A QR code scanner that works on both iOS and Android by natively embedding the platform view within Flutter. The integration with Flutter is seamless, much better than jumping into a native Activity or a ViewController to perform the scan.
+# *Warning*
+If you are using Flutter Beta or Dev channel (1.25 or 1.26) you can get the following error:
+
+`java.lang.AbstractMethodError: abstract method "void io.flutter.plugin.platform.PlatformView.onFlutterViewAttached(android.view.View)"`
+
+This is a bug in Flutter which is being tracked here: https://github.com/flutter/flutter/issues/72185
+
+There is a workaround by adding `android.enableDexingArtifactTransform=false` to your `gradle.properties` file.
## Screenshots
@@ -56,12 +64,16 @@ class _QRViewExampleState extends State {
Barcode result;
QRViewController controller;
- /// Overriding reassemble and pausing the camera
- /// ensures us that hot reload won't give a black screen
+ // In order to get hot reload to work we need to pause the camera if the platform
+ // is android, or resume the camera if the platform is iOS.
@override
void reassemble() {
super.reassemble();
- controller.pauseCamera();
+ if (Platform.isAndroid) {
+ controller.pauseCamera();
+ } else if (Platform.isIOS) {
+ controller.resumeCamera();
+ }
}
@override
diff --git a/example/README.md b/example/README.md
index 866b9a4..20d5579 100644
--- a/example/README.md
+++ b/example/README.md
@@ -47,12 +47,16 @@ class _QRViewExampleState extends State {
QRViewController controller;
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
- /// Overriding reassemble and pausing the camera
- /// ensures us that hot reload won't give a black screen
+ // In order to get hot reload to work we need to pause the camera if the platform
+ // is android, or resume the camera if the platform is iOS.
@override
void reassemble() {
super.reassemble();
- controller.pauseCamera();
+ if (Platform.isAndroid) {
+ controller.pauseCamera();
+ } else if (Platform.isIOS) {
+ controller.resumeCamera();
+ }
}
@override
@@ -69,7 +73,8 @@ class _QRViewExampleState extends State {
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
if (result != null)
- Text('Barcode Type: ${describeEnum(result.format)} Data: ${result.code}')
+ Text(
+ 'Barcode Type: ${describeEnum(result.format)} Data: ${result.code}')
else
Text('Scan a code'),
Row(
@@ -162,11 +167,17 @@ class _QRViewExampleState extends State {
}
Widget _buildQrView(BuildContext context) {
+ // For this example we check how width or tall the device is and change the scanArea and overlay accordingly.
+ var scanArea = (MediaQuery.of(context).size.width < 400 ||
+ MediaQuery.of(context).size.height < 400)
+ ? 150.0
+ : 300.0;
// To ensure the Scanner view is properly sizes after rotation
// we need to listen for Flutter SizeChanged notification and update controller
return NotificationListener(
onNotification: (notification) {
- Future.microtask(() => controller?.updateDimensions(qrKey));
+ Future.microtask(
+ () => controller?.updateDimensions(qrKey, scanArea: scanArea));
return false;
},
child: SizeChangedLayoutNotifier(
@@ -179,7 +190,7 @@ class _QRViewExampleState extends State {
borderRadius: 10,
borderLength: 30,
borderWidth: 10,
- cutOutSize: 300,
+ cutOutSize: scanArea,
),
)));
}
@@ -201,6 +212,7 @@ class _QRViewExampleState extends State {
}
+
```
diff --git a/example/lib/main.dart b/example/lib/main.dart
index 68efd50..beb8d51 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -148,7 +148,7 @@ class _QRViewExampleState extends State {
Widget _buildQrView(BuildContext context) {
// For this example we check how width or tall the device is and change the scanArea and overlay accordingly.
- var scanArea = (MediaQuery.of(context).size.width < 500 ||
+ var scanArea = (MediaQuery.of(context).size.width < 400 ||
MediaQuery.of(context).size.height < 400)
? 150.0
: 300.0;
diff --git a/ios/Classes/QRView.swift b/ios/Classes/QRView.swift
index 8f1097c..298f7a9 100644
--- a/ios/Classes/QRView.swift
+++ b/ios/Classes/QRView.swift
@@ -13,18 +13,15 @@ public class QRView:NSObject,FlutterPlatformView {
var scanner: MTBBarcodeScanner?
var registrar: FlutterPluginRegistrar
var channel: FlutterMethodChannel
- var frame: CGRect
public init(withFrame frame: CGRect, withRegistrar registrar: FlutterPluginRegistrar, withId id: Int64){
self.registrar = registrar
- self.frame = frame
previewView = UIView(frame: frame)
channel = FlutterMethodChannel(name: "net.touchcapture.qr.flutterqr/qrview_\(id)", binaryMessenger: registrar.messenger())
}
func isCameraAvailable(success: Bool) -> Void {
if success {
-
do {
try scanner?.startScanning(resultBlock: { [weak self] codes in
if let codes = codes {
@@ -56,7 +53,6 @@ public class QRView:NSObject,FlutterPlatformView {
default:
return
}
-
guard let stringValue = code.stringValue else { continue }
let result = ["code": stringValue, "type": typeString]
self?.channel.invokeMethod("onRecognizeQR", arguments: result)