「这是我参与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 库的包装:
- iOS: github.com/mikebuss/MT…
- Android: github.com/dm77/barcod…
特性:
- 扫描 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.cancel | String | iOS 上的取消按钮文字 | 仅iOS |
strings.flash_on | String | 闪光开按钮文字 | iOS + Android |
strings.flash_off | String | 闪光关按钮文字 text | iOS + Android |
restrictFormat | BarcodeFormat[] | 限定可识别的格式 | iOS + Android |
useCamera | int | 用于扫描的相机的下标 (参考 BarcodeScanner.numberOfCameras ) | iOS + Android |
autoEnableFlash | bool | 开始扫描时使闪光可用 | iOS + Android |
android.aspectTolerance | double | 在 Android上支持自动对焦 | 仅Android |
android.useAutoFocus | bool | 设置用于计算最优的相机预览大小的长宽比公差 | 仅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)