[译]Flutter简易二维码扫描插件barcode_scan2

2,862 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

本文翻译自pub: barcode_scan2 | Flutter Package (flutter-io.cn)

译时版本:barcode_scan2 4.2.0

重生

原来的 barcode_scan 不再维护了,所以 barcode_scan2  诞生了,并且支持空安全。

barcode_scan2 

用于扫描 2D 条形码和二维码的 Flutter 插件。

该插件提供了两个常用的 iOS 和 Android 库的包装:

特性:

  • 扫描 2D 条形码
  • 扫描二维码
  • 控制扫描时的闪光
  • 权限处理

开始

Android

对于 Android,在使用此插件前需要做以下准备:

  • 在 AndroidManifest.xml 中添加相机权限。

    <uses-permission android:name="android.permission.CAMERA" />

  • 该插件使用 Kotlin 编写。所以,需要在工程中添加 Kotlin 的支持。 查看 -  安装 Kotlin 插件

编辑工程级别的 build.gradle 文件如下:

buildscript {
    ext.kotlin_version = '1.3.61'
    // ...
    dependencies {
        // ...
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
// ...

编辑应用级别的 build.gradle 文件如下:

apply plugin: 'kotlin-android'
// ...
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    // ...
}

现在你可以在 pubspec.yaml 文件中依赖 barcode_scan2(原文是 barcode_scan,个人认为应该是 barcode_scan2):

dependencies:
    # ...
    barcode_scan2: any

原文是: barcode_scan: any

在 Android Studio 点击 “Package get” 或在工程目录下运行 flutter package get

iOS

要在 iOS 上使用,需要在 Info.plist 中添加相机的使用描述。

<dict>
    <!-- ... -->
    <key>NSCameraUsageDescription</key>
    <string>Camera permission is required for barcode scanning.</string>
    <!-- ... -->
</dict>

使用

import 'package:barcode_scan/barcode_scan.dart';

void main() async {
  var result = await BarcodeScanner.scan();

  print(result.type); // The result type (barcode, cancelled, failed)
  print(result.rawContent); // The barcode content
  print(result.format); // The barcode format (as enum)
  print(result.formatNote); // If a unknown format was scanned this field contains a note
}

高级用法

可以给扫描方法传递选项:

import 'package:barcode_scan/barcode_scan.dart';

void main() async {

  var options = ScanOptions(
    // set the options
  );

  var result = await BarcodeScanner.scan(options: options);

  // ...
}

支持的选项

选项类型描述支持
strings.cancelStringiOS 上的取消按钮文字仅iOS
strings.flash_onString闪光开按钮文字iOS + Android
strings.flash_offString闪光关按钮文字 textiOS + Android
restrictFormatBarcodeFormat[]限定可识别的格式iOS + Android
useCameraint用于扫描的相机的下标 (参考 BarcodeScanner.numberOfCameras)iOS + Android
autoEnableFlashbool开始扫描时使闪光可用iOS + Android
android.aspectTolerancedouble在 Android上支持自动对焦仅Android
android.useAutoFocusbool设置用于计算最优的相机预览大小的长宽比公差仅Android

开发安装

安装 protobuf

Mac:

$ brew install protobuf
$ brew install swift-protobuf

Windows / Linux: github.com/protocolbuf…

激活 protobuf dart 插件:

$ flutter pub global activate protoc_plugin

为 IDEA / Android Studio 安装 Protobuf Support 插件 或为 VS Code 安装 vscode-proto3

如果改变了 protos.proto , 需要执行 ./generate_proto.sh 来更新 dart / swift 代码。

常见问题

Android "Could not find org.jetbrains.kotlin:kotlin-stdlib-jre..."

把 org.jetbrains.kotlin:kotlin-stdlib-jre 改为 org.jetbrains.kotlin:kotlin-stdlib-jdk (StackOverflow)