Flutter二维码与条形码扫描插件flutter_qr_bar_scanner的使用
Flutter二维码与条形码扫描插件flutter_qr_bar_scanner的使用
插件简介
flutter_qr_bar_scanner
是一个用于在Flutter应用中实现全屏扫描二维码和条形码的插件。它使用Google的Mobile Vision API来读取和扫描二维码/条形码,并通过Firebase的MLKit进行图像处理。该插件支持Android和iOS平台,能够直接从设备摄像头获取图像并显示预览。
Android 模型
在新版本的MLKit中,有两种不同的模型可以用于条形码扫描:
- 内置模型:默认使用内置模型,这会增加约2.2MB的代码大小,但扫描效果更好,并且不需要在后台下载额外的包。
- Google Play Services:可以通过Google Play Services动态下载模型。需要在
AndroidManifest.xml
中添加以下元数据:<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="barcode" /> <!-- 如果需要多个模型:android:value="barcode,model2,model3" --> </application>
iOS 64位支持
该插件仅支持iOS 64位设备。如果你需要支持iOS 11之前的版本,建议将iOS Deployment Target
设置为11.0或更高版本。具体步骤如下:
- 在
Podfile
中添加以下行:platform :ios, '11.0'
- 确保
Podfile
底部设置了部署目标:post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ENABLE_BITCODE'] = 'NO' config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' end end end
- 在XCode中设置
iOS Deployment Target
为11.0。
使用示例
完整示例代码
import 'package:flutter/material.dart';
import 'package:flutter_qr_bar_scanner/qr_bar_scanner_camera.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter QR/Bar Code Reader',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter QR/Bar Code Reader'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String? _qrInfo = 'Scan a QR/Bar code'; // 初始化提示信息
bool _camState = false; // 控制相机状态
// 扫描结果回调函数
_qrCallback(String? code) {
setState(() {
_camState = false; // 停止相机预览
_qrInfo = code; // 更新扫描结果
});
}
// 启动扫描
_scanCode() {
setState(() {
_camState = true; // 开启相机预览
});
}
[@override](/user/override)
void initState() {
super.initState();
_scanCode(); // 应用启动时自动开始扫描
}
[@override](/user/override)
void dispose() {
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title!),
),
body: _camState
? Center(
child: SizedBox(
height: 1000, // 设置相机预览的高度
width: 500, // 设置相机预览的宽度
child: QRBarScannerCamera(
onError: (context, error) => Text(
error.toString(), // 错误处理
style: TextStyle(color: Colors.red),
),
qrCodeCallback: (code) {
_qrCallback(code); // 扫描结果回调
},
),
),
)
: Center(
child: Text(_qrInfo!), // 显示扫描结果或提示信息
),
);
}
}
更多关于Flutter二维码与条形码扫描插件flutter_qr_bar_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter二维码与条形码扫描插件flutter_qr_bar_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_qr_bar_scanner
插件进行二维码与条形码扫描的示例代码。这个插件允许你快速集成扫描功能到你的应用中。
首先,确保你的Flutter项目已经创建,并在pubspec.yaml
文件中添加flutter_qr_bar_scanner
依赖:
dependencies:
flutter:
sdk: flutter
flutter_qr_bar_scanner: ^3.0.1 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的项目中,你需要配置权限,特别是在Android和iOS平台上。
Android配置
在android/app/src/main/AndroidManifest.xml
中添加相机权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
iOS配置
在ios/Runner/Info.plist
中添加相机使用描述:
<key>NSCameraUsageDescription</key>
<string>需要访问相机以扫描二维码和条形码</string>
Flutter代码实现
在你的主Dart文件中(例如main.dart
),你可以按照以下步骤实现扫描功能:
import 'package:flutter/material.dart';
import 'package:flutter_qr_bar_scanner/flutter_qr_bar_scanner.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ScanPage(),
);
}
}
class ScanPage extends StatefulWidget {
@override
_ScanPageState createState() => _ScanPageState();
}
class _ScanPageState extends State<ScanPage> {
String result = "";
Future<void> _scanQRAndBarcode() async {
String? scanResult = await FlutterQrBarScanner.scan();
setState(() {
result = scanResult ?? "取消扫描";
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("二维码与条形码扫描"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
result,
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _scanQRAndBarcode,
child: Text("开始扫描"),
),
],
),
),
);
}
}
解释
- 权限配置:在Android和iOS平台上配置了必要的相机权限。
- 依赖导入:在
pubspec.yaml
文件中添加了flutter_qr_bar_scanner
依赖。 - UI实现:
- 创建了一个简单的Flutter应用,其中包含一个按钮和一个显示扫描结果的文本。
- 点击按钮时,调用
_scanQRAndBarcode
方法,启动扫描功能。 - 扫描完成后,将结果显示在屏幕上。
这个示例提供了一个基本的二维码和条形码扫描功能,你可以根据需要进行扩展和自定义。