Flutter快速条形码扫描插件icapps_fast_barcode_scanner的使用
Flutter快速条形码扫描插件icapps_fast_barcode_scanner的使用
icapps_fast_barcode_scanner
是一个基于 MLKit(Android)和 AVFoundation(iOS)的快速条形码扫描插件。该插件将UI设计留给了用户,但提供了对相机预览的访问。
注意:此插件仍在开发中,某些API可能尚未可用。如果您有任何问题、想法或建议,请在 GitHub 上创建一个issue或pull request。我自己也在生产环境中使用该插件,并会继续积极开发和维护它。
此插件要求 iOS 10.0 及以上版本,Android SDK 版本 21 或更高版本。
安装
在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
icapps_fast_barcode_scanner: ^1.1.0
iOS 配置
在 ios/Runner/Info.plist
文件中添加 NSCameraUsageDescription
键:
<key>NSCameraUsageDescription</key>
<string>此应用需要访问您的手机摄像头以扫描条形码</string>
Android 配置
在 android/app/build.gradle
文件中设置最低SDK版本为21或更高:
android {
defaultConfig {
minSdkVersion 21
}
}
使用
icapps_fast_barcode_scanner
包含两个主要类:CameraController
和 BarcodeCamera
。
完整的示例如下:
import 'package:flutter/material.dart';
import 'package:icapps_fast_barcode_scanner/icapps_fast_barcode_scanner.dart';
class MyScannerScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('条形码扫描器')),
body: BarcodeCamera(
types: const [
BarcodeType.ean8,
BarcodeType.ean13,
BarcodeType.code128
],
resolution: Resolution.hd720,
framerate: Framerate.fps30,
mode: DetectionMode.pauseVideo,
onScan: (code) => print(code),
children: [
MaterialPreviewOverlay(animateDetection: false),
BlurPreviewOverlay(),
Positioned(
child: ElevatedButton(
onPressed: () =>
CameraController.instance.resumeDetector(),
child: Text('恢复'),
),
)
],
)
);
}
}
在上面的代码中,有两个覆盖层在 children
列表中。这两个覆盖层包含在包中:
MaterialPreviewOverlay
模仿了官方的材料设计条形码扫描示例。BlurPreviewOverlay
在检测到条形码时模糊屏幕,并在恢复时取消模糊。这些是正常的Widget,它们显示在相机预览之上。查看它们的源代码可以找到如何响应来自条形码扫描器的事件。
CameraController
CameraController
单例管理相机。它处理所有低级操作,如与本地代码通信。它作为单例实现是为了保证始终有一个且相同的控制器来管理相机。可以通过 CameraController.instance
属性访问控制器。这些是可以访问的方法:
方法 | 描述 |
---|---|
initialize |
使用提供的配置初始化扫描器 |
pauseDetector |
主动暂停扫描器 |
resumeDetector |
从暂停状态恢复扫描器 |
toggleTorch |
开关手电筒 |
dispose |
停止并重置平台级别的相机 |
如果你使用 BarcodeCamera
小部件,你不必自己调用 initialize
。
CameraState
CameraController.instance.state
包含扫描器的当前状态。你可以使用它来构建自己的覆盖层。可以访问的信息如下:
属性 | 描述 |
---|---|
isInitialized |
表示相机是否已初始化 |
previewConfig |
当前使用的 PreviewConfiguration |
eventNotifier |
用于响应初始化或检测代码的事件通知器 |
torchState |
手电筒的当前状态(开/关) |
hasError |
表示 error 是否为空 |
error |
访问上一次产生的错误 |
BarcodeCamera
BarcodeCamera
是一个显示相机视频流预览的小部件。它在后台调用 CameraController
进行初始化和配置。
所有可能的配置(要么传递给 BarcodeCamera
,要么传递给 CameraController.initialize
)如下:
属性 | 描述 |
---|---|
types |
要扫描的条形码类型(参见 BarcodeType ) |
mode |
是否在检测到条形码时暂停相机 |
resolution |
相机视频流的分辨率 |
framerate |
相机视频流的帧率 |
position |
选择后置或前置摄像头(仅限iOS) |
onScan |
条形码被扫描时的回调 |
children |
显示在预览之上的小部件 |
示例代码
在 example/lib/main.dart
文件中的示例代码如下:
import 'package:flutter/material.dart';
import 'scanner_screen.dart';
void main() {
runApp(const MaterialApp(home: ScannerScreen()));
}
更多关于Flutter快速条形码扫描插件icapps_fast_barcode_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter快速条形码扫描插件icapps_fast_barcode_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用icapps_fast_barcode_scanner
插件来实现快速条形码扫描的一个简单示例。这个插件允许你快速集成条形码扫描功能到你的Flutter应用中。
首先,确保你的Flutter项目已经创建并运行。然后,按照以下步骤操作:
1. 添加依赖
在你的pubspec.yaml
文件中添加icapps_fast_barcode_scanner
依赖:
dependencies:
flutter:
sdk: flutter
icapps_fast_barcode_scanner: ^最新版本号 # 请替换为最新版本号
运行flutter pub get
来安装依赖。
2. 导入插件
在你想要使用条形码扫描功能的Dart文件中导入插件:
import 'package:icapps_fast_barcode_scanner/icapps_fast_barcode_scanner.dart';
3. 使用插件进行扫描
下面是一个简单的示例,展示了如何启动条形码扫描器并处理扫描结果:
import 'package:flutter/material.dart';
import 'package:icapps_fast_barcode_scanner/icapps_fast_barcode_scanner.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('条形码扫描示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 启动条形码扫描
String? result = await IcappsFastBarcodeScanner.scan();
// 处理扫描结果
if (result != null) {
// 显示扫描结果
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('扫描结果: $result')),
);
} else {
// 处理取消或错误情况
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('扫描取消或发生错误')),
);
}
},
child: Text('扫描条形码'),
),
),
),
);
}
}
4. 运行应用
确保你的设备或模拟器已经连接,并运行flutter run
来启动应用。点击“扫描条形码”按钮,应该会启动条形码扫描界面。扫描成功后,扫描结果会显示为一个SnackBar消息。
注意事项
- 确保你的设备或模拟器具有相机权限。
- 在实际应用中,你可能需要处理更多的错误情况和用户交互,比如请求权限、显示加载指示器等。
这个示例展示了如何使用icapps_fast_barcode_scanner
插件进行基本的条形码扫描。根据你的具体需求,你可以进一步定制和扩展这个功能。