Skip to content
This repository has been archived by the owner on Mar 26, 2024. It is now read-only.

triply-at/qr_code_scanner

 
 

Repository files navigation

QR Code Scanner

GH Actions

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.

Screenshots

Android

iOS

Get Scanned QR Code

When a QR code is recognized, the text identified will be set in 'qrText'.

class _QRViewExampleState extends State<QRViewExample> {
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
  var qrText = "";
  QRViewController controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(
            flex: 5,
            child: QRView(
              key: qrKey,
              onQRViewCreated: _onQRViewCreated,
            ),
          ),
          Expanded(
            flex: 1,
            child: Center(
              child: Text('Scan result: $qrText'),
            ),
          )
        ],
      ),
    );
  }

  void _onQRViewCreated(QRViewController controller) {
    this.controller = controller;
    controller.scannedDataStream.listen((scanData) {
      setState(() {
        qrText = scanData;
      });
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }
}

iOS Integration

In order to use this plugin, add the following to your Info.plist file:

<key>io.flutter.embedded_views_preview</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>This app needs camera access to scan QR codes</string>

Get a callback if camera permissions are set

QRView(
      onPermissionSet: (QRViewController controller, bool permission){
      },
    ),

Call native alert dialog (Android and IOS) if you dont have permissions

controller.showNativeAlertDialog();

Call native alert dialog automatically if no permission is granted

QRView(
      showNativeAlertDialog: true, 
    ),

Set allowed Barcode Types

controller.setAllowedBarcodeTypes([BarcodeTypes.ean8, BarcodeTypes.ean13]);

Flip Camera (Back/Front)

The default camera is the back camera.

await controller.flipCamera();

Flash (Off/On)

By default, flash is OFF.

await controller.toggleFlash();

Resume/Pause

Pause camera stream and scanner.

await controller.pause();

Resume camera stream and scanner.

await controller.resume();

Controller

Most controller methods return ReturnStatus. Its defined as

enum ReturnStatus { Success, Failed }

If you want to get a bool from the returned object just use the asBool Method like this:

if((await controller.resume()).asBool){
...
}

You can also get the SystemFeatures from the controller:

  • hasFlash
  • hasBackCamera
  • hasFrontCamera
controller.systemFeatures.hasBackCamera

To get the active camera (front or back):

var backCameraIsActive = controller.activeCamera == Camera.BackCamera
var FrontCameraIsActive = controller.activeCamera == Camera.FrontCamera

dispose

If the view gets disposed, the flash and camera automatically shutdown.

SDK

Requires at least SDK 24 (Android 7.0).

TODOs

  • iOS Native embedding is written to match what is supported in the framework as of the date of publication of this package. It needs to be improved as the framework support improves.
  • In future, options will be provided for default states.
  • Finally, I welcome PR's to make it better :), thanks

Credits

Packages

No packages published

Languages

  • Dart 40.1%
  • Kotlin 31.1%
  • Swift 21.5%
  • Ruby 6.5%
  • Objective-C 0.8%