Flutter调用原生硬件Api实现扫码
barcode_scan2可以实现扫描条形码、二维码
地址:https://pub.dev/packages/barcode_scan2
Android里面的配置
安装
dependencies: barcode_scan2: ^4.1.3
配置权限
Add the camera permission to your AndroidManifest.xml
配置:android\app\src\main\AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" />
编辑你的android目录下面的build.gradle (Edit your project-level build.gradle file to look likethis)
注意:如果ext.kotlin_version的版本大于1.3.61则无需配置
buildscript { ext.kotlin_version = '1.3.61' // ... dependencies { // ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
编辑你的android/app目录下面的build.gradle (Edit your app-level build.gradle file to look likethis)
apply plugin: 'kotlin-android' // ... dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // ... }注意:minSdkVersion 18 以上
defaultConfig { ... minSdkVersion 18 ... }提示:如果您使用的是最新版本的flutter sdk,在Android里面只需要配置minSdkVersion 18和CAMERA的权限
Ios里面的配置
<dict>
<!-- ... -->
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>
<!-- ... -->
</dict>
示例代码
import 'package:flutter/material.dart';
import 'package:barcode_scan2/barcode_scan2.dart';
class BarcodeScanPage extends StatefulWidget {
const BarcodeScanPage({super.key});
@override
State<BarcodeScanPage> createState() => _BarcodeScanPageState();
}
class _BarcodeScanPageState extends State<BarcodeScanPage> {
void _doBarcodeScan() async {
var options = const ScanOptions(
// set the options
autoEnableFlash: true,
strings: {
'cancel': '取消',
'flash_on': '打开Flash',
'flash_off': '关闭Flash',
});
var result = await BarcodeScanner.scan(options: options);
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
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("扫码演示")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _doBarcodeScan,
child: const Text("扫描二维码 条形码"),
)
],
),
),
);
}
}