快速二维码阅读器视图插件

一个适用于iOS和Android的Flutter插件,允许访问设备摄像头以扫描多种类型的代码(QR、PDF417、CODE39等)。很大程度上基于camera。

example2-1

example

红色框是Flutter动画(可移除)。 由于GIF帧率较低

特点

  • 在widget中显示实时摄像头预览。
  • 在iOS上使用原生AVFoundation代码检测
  • 在Android上使用ML Kit

安装

首先,将fast_qr_reader_view添加为pubspec.yaml文件中的依赖项

iOS

ios/Runner/Info.plist中添加一个键为Privacy - Camera Usage Description的行,并提供使用说明。

或者在文本格式中添加键

<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>

Android

按照此步骤将Firebase添加到您的项目中(仅此一步,而非整个指南)。

在您的 android/app/build.gradle 文件中将最低 Android sdk 版本更改为 21(或更高)。

minSdkVersion 21

示例

这是一个显示全屏摄像头预览的小型示例Flutter应用。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:fast_qr_reader_view/fast_qr_reader_view.dart';

List<CameraDescription> cameras;

Future<Null> main() async {
  cameras = await availableCameras();
  runApp(new CameraApp());
}

class CameraApp extends StatefulWidget {
  @override
  _CameraAppState createState() => new _CameraAppState();
}

class _CameraAppState extends State<CameraApp> {
  QRReaderController controller;

  @override
  void initState() {
    super.initState();
    controller = new QRReaderController(cameras[0], ResolutionPreset.medium, [CodeFormat.qr], (dynamic value){
        print(value); // the result!
    // ... do something
    // wait 3 seconds then start scanning again.
    new Future.delayed(const Duration(seconds: 3), controller.startScanning);
    });
    controller.initialize().then((_) {
      if (!mounted) {
        return;
      }
      setState(() {});
      controller.startScanning();
    });
  }

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

  @override
  Widget build(BuildContext context) {
    if (!controller.value.isInitialized) {
      return new Container();
    }
    return new AspectRatio(
        aspectRatio:
        controller.value.aspectRatio,
        child: new QRReaderPreview(controller));
  }
}

有关更详细的用法示例,请参阅此处

GitHub

https://github.com/facundomedica/fast_qr_reader_view