Search code examples
flutterdartqr-codebarcode-scanner

Is there a way to scan barcodes in Flutter?


Basically, I'm making an app that scans a QR code to connect to a server. Then, the app will scan the barcode of products and take pictures of the item and send them to the server. My question is the following :

Is there a Flutter plugin to scan QR codes and barcodes that doesn't enter in conflict with image_picker?

Here's what I found so far.

I appreciate any help you can provide. Thanks!


Update

The issue with barcode_scan was resolved. I ended up using this one since it's faster than the accepted answer and its issues got resolved rather quickly. Be aware that its behaviour on iOS is modified by Apple, so you might get different results with checksum numbers or something.


Solution

  • I've previously had a similar problem, and after searching as you did I didn't find a whole lot. I decided that the best approach would be to write a plugin myself... so shameless plug for my plugin here =D, not that I benefit from anyone else using it at all.

    You can see it here. However, I haven't had time to document it, test it all that extensively, or publish it properly on Pub. So your mileage may vary. It should however work on android 4.4+ (and maybe below), and iOS devices that flutter supports. I also haven't tested it in conjunction with the Camera plugin but I don't see why it would have a problem with it.

    It takes a different approach than most of the other qr code plugins; instead of making an android or iOS window, doing the scan, then returning to flutter, it uses flutter's texture rendering capabilities to have the camera render directly into flutter.

    A few more things to consider are that it uses the Google Mobile Vision SDK with the applicable licensing and capabilities that comes along with that (and requires a recent version of Play Services on Android); and that it currently only supports the most basic extraction of information from barcode scans - I only needed the raw text out so that's all I did.

    To use it, add this to your pubspec.yaml:

    dependencies:
      qr_mobile_vision: '^0.0.7'
    

    And implement as follows:

    import 'package:qr_mobile_vision/QrCamera.dart';
    
    ...
    
    new Container(
      constraints: new BoxConstraints.loose(
      new Size(cameraSize, cameraSize)),
      child: new QrCamera(
        qrCodeCallback: (code) {
          print(code);
        }
      ),
    )
    

    I do plan on finishing documentation/testing/etc eventually, but you're welcome to try it out in the meantime. If you decide to use it and need a feature it doesn't support I may be able to help implement it... but PRs are welcome and encouraged!

    UPDATE: this does include Barcode support now. You can pass in which types of QR code / Barcode you want to support when you instantiate QrCamera. It defaults to all, which takes more processing so if you're after a certain type it's recommended that you pass it in.