前面一篇寫了生成二維碼圖片,這篇來寫使用相機掃描識別二維碼
識別二維碼需要用到插件 barcode_scan
首先在 pubspec.yaml 文件中添加以下依賴,添加依賴后在 pubspec.yaml 運行 flutter packages get 或 使用IDE更新軟件包。
dependencies: ... barcode_scan: ^1.0.0
Android配置
在使用它之前需要先配置 android\app\src\main\AndroidManifest.xml
在該文件中添加添加app獲取相機權限及BarcodeScanner activity
<!--獲取相機權限--> <uses-permission android:name="android.permission.CAMERA" />
<activity android:name="com.apptreesoftware.barcodescan.BarcodeScannerActivity"/>
如下圖所示

編輯項目級build.gradle文件
buildscript {
ext.kotlin_version = '1.2.31'
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
...
如圖所示

以及編輯應用級build.gradle文件
apply plugin: 'kotlin-android'
...
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
...
}
如圖所示

注意 apply plugin: 'kotlin-android' 需要放在 apply plugin: 'com.android.application' 之后
IOS配置
在 Info.plist 中添加一下內容
<key>NSCameraUsageDescription</key> <string>Camera permission is required for barcode scanning.</string>
掃碼實現
完成以上步驟之后在需要觸發掃碼的頁面引用barcode_scan
import 'package:barcode_scan/barcode_scan.dart';
然后寫上一個調用掃碼的方法
// 掃描二維碼
Future scan() async {
try {
// 此處為掃碼結果,barcode為二維碼的內容
String barcode = await BarcodeScanner.scan();
print('掃碼結果: '+barcode);
} on PlatformException catch (e) {
if (e.code == BarcodeScanner.CameraAccessDenied) {
// 未授予APP相機權限
print('未授予APP相機權限');
} else {
// 掃碼錯誤
print('掃碼錯誤: $e');
}
} on FormatException{
// 進入掃碼頁面后未掃碼就返回
print('進入掃碼頁面后未掃碼就返回');
} catch (e) {
// 掃碼錯誤
print('掃碼錯誤: $e');
}
}
在使用時觸發scan()方法即可,效果如下

默認的右上角打開閃光燈的文字為英文,如果需要修改可以到Flutter目錄下修改以下相應文件
Andriod文件
flutter\.pub-cache\hosted\pub.flutter-io.cn\barcode_scan-1.0.0\android\src\main\kotlin\com\apptreesoftware\barcodescan\BarcodeScannerActivity.kt
如圖

IOS文件
flutter\.pub-cache\hosted\pub.flutter-io.cn\barcode_scan-1.0.0\ios\Classes\BarcodeScannerViewController.m
如圖

注:該插件也可以用來掃描條形碼
