Flutter条形码扫描插件flutter_barcode_scanner_sit的使用
Flutter条形码扫描插件flutter_barcode_scanner_sit的使用
介绍
这是一个为Flutter应用添加条形码扫描支持的插件,适用于Android和iOS平台。
尝试示例
只需克隆或下载仓库,在Android Studio/VS Code
中打开项目,打开pubspec.yaml
并点击Packages get
。连接设备并运行。要在iPhone上运行,需要从Xcode首次运行,并在example/ios
中执行pod install
,然后从Xcode运行。
新功能
⚡ 现在也可以与local_auth
一起使用。
开始使用
请按照以下步骤进行Android和iOS的配置。 请注意,仔细遵循iOS步骤。
Android
⚡ 不用担心,你不需要做任何事情。
iOS - 需要Swift支持
部署目标:12
1. 重新开始:
- 创建一个新的Flutter项目,请检查是否包括包含iOS代码的Swift支持。
- 创建新的Flutter项目后,在Xcode中打开
/ios
项目,将最低部署目标设置为12,并将Swift版本设置为5。 - 设置好部署目标和Swift版本后,关闭Xcode,然后在Flutter项目的
/ios
目录下运行pod install
。
完成基本配置后,继续阅读如何使用部分。
2. 添加到现有Flutter应用:
如果你的现有iOS代码是Swift,则只需要执行以下操作。
- 将最小部署目标设置为12,并将Swift版本设置为5。
- 关闭Xcode并在Flutter项目的
/ios
目录下运行pod install
。 - 现在继续阅读如何使用部分。
如果你的现有iOS代码是Objective-C,则需要执行以下操作。
- 在不同位置创建一个具有相同名称的新Flutter项目(创建时不要忘记检查包含iOS代码的Swift支持)。
- 只需复制新创建的
/ios
文件夹并替换现有的/ios
。 - 在Xcode中打开iOS项目,将最小部署目标设置为12,并将Swift版本设置为5。
- 在
/ios
中运行pod install
。
注意:如果你之前对iOS部分进行了更改,可能需要再次进行这些配置。
如何使用?
要在iOS上使用,你需要添加相机使用描述。为此,请在Xcode中打开并添加相机使用描述到Info.plist
。
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>
在Android和iOS中进行更改后,将flutter_barcode_scanner_sit
添加到pubspec.yaml
中。
dependencies:
...
flutter_barcode_scanner_sit: ^1.0.4
一次性扫描
- 首先需要导入包。
import 'package:flutter_barcode_scanner_sit/flutter_barcode_scanner.dart';
- 然后使用
scanBarcode
方法访问条形码扫描。
String barcodeScanRes = await FlutterBarcodeScanner.scanBarcode(
COLOR_CODE,
CANCEL_BUTTON_TEXT,
isShowFlashIcon,
scanMode);
在这里scanBarcode
中,
COLOR_CODE
是十六进制颜色,是条形码叠加层中的线条颜色,可以传递任意颜色。CANCEL_BUTTON_TEXT
是屏幕上取消按钮的文本,可以传递任意文本和语言。isShowFlashIcon
是布尔值,用于显示或隐藏闪光灯图标。scanMode
是枚举类型,用户可以传递{ QR, BARCODE, DEFAULT }
中的任何一个,如果未传递,则默认值为QR
。它显示条形码和QR的图形叠加层。
注意:目前,scanMode
仅用于显示条形码和QR的图形叠加层。选择任何模式都会同时扫描QR和条形码。
连续扫描
如果你需要在不关闭摄像头的情况下连续扫描条形码,请使用FlutterBarcodeScanner.getBarcodeStreamReceiver
,参数与FlutterBarcodeScanner.scanBarcode
相同。
例如:
FlutterBarcodeScanner.getBarcodeStreamReceiver("#ff6666", "Cancel", false, ScanMode.DEFAULT)
.listen((barcode) {
/// 使用条形码
});
示例代码
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_barcode_scanner_sit/flutter_barcode_scanner.dart';
import 'package:local_auth/local_auth.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _scanBarcode = 'Unknown';
[@override](/user/override)
void initState() {
super.initState();
}
Future<void> startBarcodeScanStream() async {
FlutterBarcodeScanner.getBarcodeStreamReceiver(
'#ff6666', 'Cancel', true, ScanMode.BARCODE)!
.listen((barcode) => print(barcode)); // 打印扫描结果
}
Future<void> scanQR() async {
String barcodeScanRes;
try {
barcodeScanRes = await FlutterBarcodeScanner.scanBarcode(
'#ff6666', 'Cancel', true, ScanMode.QR); // 扫描二维码
print(barcodeScanRes);
} on PlatformException {
barcodeScanRes = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_scanBarcode = barcodeScanRes; // 更新扫描结果
});
}
Future<void> scanBarcodeNormal() async {
String barcodeScanRes;
try {
barcodeScanRes = await FlutterBarcodeScanner.scanBarcode(
'#ff6666', 'Cancel', true, ScanMode.BARCODE); // 正常扫描条形码
print(barcodeScanRes);
} on PlatformException {
barcodeScanRes = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_scanBarcode = barcodeScanRes; // 更新扫描结果
});
}
Future<void> _authenticate() async {
final LocalAuthentication auth = LocalAuthentication();
bool authenticated = false;
try {
authenticated = await auth.authenticate(
localizedReason: 'Let OS determine authentication method',
options: const AuthenticationOptions(
stickyAuth: true,
),
);
print(authenticated.toString());
} on PlatformException catch (e) {
print(e);
return;
}
if (!mounted) {
return;
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Barcode scan')),
body: Builder(builder: (BuildContext context) {
return Container(
alignment: Alignment.center,
child: Flex(
direction: Axis.vertical,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () => scanBarcodeNormal(),
child: Text('Start barcode scan')), // 启动条形码扫描
ElevatedButton(
onPressed: () => scanQR(),
child: Text('Start QR scan')), // 启动二维码扫描
ElevatedButton(
onPressed: () => startBarcodeScanStream(),
child: Text('Start barcode scan stream')), // 启动条形码扫描流
ElevatedButton(
onPressed: () => _authenticate(),
child: Text('_authenticate')), // 身份验证
Text('Scan result : $_scanBarcode\n',
style: TextStyle(fontSize: 20)) // 显示扫描结果
]));
}),
),
);
}
}
更多关于Flutter条形码扫描插件flutter_barcode_scanner_sit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter条形码扫描插件flutter_barcode_scanner_sit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_barcode_scanner_sit
插件进行条形码扫描的示例代码。请确保您已经按照插件的官方文档完成了必要的安装和配置步骤。
1. 添加依赖
首先,在您的pubspec.yaml
文件中添加flutter_barcode_scanner_sit
依赖:
dependencies:
flutter:
sdk: flutter
flutter_barcode_scanner_sit: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android和iOS权限
确保在AndroidManifest.xml
和Info.plist
中配置了必要的权限,例如相机权限。这通常在使用相机相关的插件时自动提示,但最好还是检查一下。
3. 使用插件进行条形码扫描
以下是一个简单的示例,展示如何在Flutter应用中使用flutter_barcode_scanner_sit
插件进行条形码扫描:
import 'package:flutter/material.dart';
import 'package:flutter_barcode_scanner_sit/flutter_barcode_scanner_sit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Barcode Scanner Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: BarcodeScannerScreen(),
);
}
}
class BarcodeScannerScreen extends StatefulWidget {
@override
_BarcodeScannerScreenState createState() => _BarcodeScannerScreenState();
}
class _BarcodeScannerScreenState extends State<BarcodeScannerScreen> {
String _result = '';
Future<void> _scanBarcode() async {
String result = await FlutterBarcodeScannerSit.scanBarcode(
'#FF0000', // 可选:指定扫描框的颜色
'Cancel', // 可选:取消按钮的文本
true, // 可选:是否显示闪光灯按钮
true, // 可选:是否显示相册按钮(从相册选择图片进行扫描)
'Beep', // 可选:扫描成功时的提示音(可设置为空字符串以禁用提示音)
);
// 更新UI以显示扫描结果
setState(() {
_result = result;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Barcode Scanner Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Scan Result:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
_result,
style: TextStyle(fontSize: 24, color: Colors.blue),
),
SizedBox(height: 40),
ElevatedButton(
onPressed: _scanBarcode,
child: Text('Scan Barcode'),
),
],
),
),
);
}
}
解释
- 依赖添加:在
pubspec.yaml
文件中添加flutter_barcode_scanner_sit
依赖。 - UI设计:创建了一个简单的Flutter应用,包含一个文本显示扫描结果和一个按钮触发扫描操作。
- 扫描功能:在
_scanBarcode
方法中调用FlutterBarcodeScannerSit.scanBarcode
进行条形码扫描。该方法返回扫描到的条形码内容,然后更新UI显示结果。
请确保您已经按照插件的官方文档处理了必要的权限和配置。此代码提供了一个基本的框架,您可以根据实际需求进一步扩展和修改。