Flutter二维码扫描插件flutter_bar_scanner_alternative2的使用
Flutter二维码扫描插件flutter_bar_scanner_alternative的使用
一个为Flutter应用添加条形码扫描支持的插件,适用于Android和iOS平台。

尝试示例
只需克隆或下载仓库,打开项目在Android Studio/VS Code
,打开pubspec.yaml
文件并点击Packages get
。
连接设备并点击run
。
要在iPhone上运行,你首先需要从Xcode运行并执行pod install
在example/ios
目录下,然后从Xcode运行。
开始使用
请按照以下步骤配置Android和iOS:
Android
不用担心,你无需进行任何操作。
iOS - 需要Swift支持
部署目标版本:12
1. 新建项目
- 创建一个新的Flutter项目。请确保选择“包含Swift支持用于iOS代码”。
- 创建完成后,在Xcode中打开
/ios
项目,并设置最低部署目标为12和Swift版本为5。 - 设置好部署目标和Swift版本后,关闭Xcode并在Flutter项目的
/ios
目录下运行pod install
。
完成基本配置后,进入下一节“如何使用”。
2. 添加到现有项目
如果你现有的iOS代码是Swift,只需做以下操作:
- 设置最低部署目标为12和Swift版本为5。
- 关闭Xcode并在Flutter项目的
/ios
目录下运行pod install
。 - 然后进入下一节“如何使用”。
如果你现有的iOS代码是Objective-C,需要做以下操作:
- 在不同的位置创建一个新的Flutter项目(确保选择“包含Swift支持用于iOS代码”)。
- 复制新创建的
/ios
文件夹并替换现有的/ios
文件夹。 - 打开Xcode项目,设置最低部署目标为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_bar_scanner_alternative
添加到pubspec.yaml
文件中:
dependencies:
...
flutter_bar_scanner_alternative: ^2.0.0
单次扫描
- 首先导入包:
import 'package:flutter_bar_scanner_alternative/flutter_bar_scanner_alternative.dart';
- 使用
scanBarcode
方法访问条形码扫描功能:
String barcodeScanRes = await FlutterBarScannerAlternative.scanBarcode(
COLOR_CODE,
CANCEL_BUTTON_TEXT,
isShowFlashIcon,
scanMode);
在scanBarcode
中,
COLOR_CODE
是一个十六进制颜色值,代表条形码覆盖层的颜色。CANCEL_BUTTON_TEXT
是取消按钮上的文本。isShowFlashIcon
是一个布尔值,用于显示或隐藏闪光灯图标。scanMode
是一个枚举值,可以传递QR
,BARCODE
,DEFAULT
中的任何一个。如果没有传递,则默认值为QR
。
注意:当前scanMode
仅用于显示条形码和QR码的图形覆盖层。无论选择了哪种模式,都会扫描这两种条形码。
持续扫描
如果需要持续扫描条形码而不关闭摄像头,可以使用FlutterBarScannerAlternative.getBarcodeStreamReceiver
方法。参数与FlutterBarScannerAlternative.scanBarcode
相同:
FlutterBarScannerAlternative.getBarcodeStreamReceiver("#ff6666", "Cancel", false, ScanMode.DEFAULT)
.listen((barcode) {
// 使用扫描到的条形码
});
贡献
欢迎贡献,如果你喜欢这个项目,请给它点个星。
联系

邮箱:amol.gangadhare@gmail.com
示例代码
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bar_scanner_alternative/flutter_bar_scanner_alternative.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 {
FlutterBarScannerAlternative.getBarcodeStreamReceiver(
'#ff6666', 'Cancel', true, ScanMode.BARCODE)!
.listen((barcode) => print(barcode));
}
Future<void> scanQR() async {
String barcodeScanRes;
// 平台消息可能会失败,所以我们使用try/catch来捕获PlatformException。
try {
barcodeScanRes = await FlutterBarScannerAlternative.scanBarcode(
'#ff6666', 'Cancel', true, ScanMode.QR);
print(barcodeScanRes);
} on PlatformException {
barcodeScanRes = 'Failed to get platform version.';
}
// 如果小部件在异步平台消息飞行时被树移除,我们希望丢弃回复而不是调用setState来更新不存在的外观。
if (!mounted) return;
setState(() {
_scanBarcode = barcodeScanRes;
});
}
// 平台消息是异步的,因此我们在异步方法中初始化。
Future<void> scanBarcodeNormal() async {
String barcodeScanRes;
// 平台消息可能会失败,所以我们使用try/catch来捕获PlatformException。
try {
barcodeScanRes = await FlutterBarScannerAlternative.scanBarcode(
'#ff6666', 'Cancel', true, ScanMode.BARCODE);
print(barcodeScanRes);
} on PlatformException {
barcodeScanRes = 'Failed to get platform version.';
}
// 如果小部件在异步平台消息飞行时被树移除,我们希望丢弃回复而不是调用setState来更新不存在的外观。
if (!mounted) return;
setState(() {
_scanBarcode = barcodeScanRes;
});
}
[@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')),
Text('Scan result : $_scanBarcode\n',
style: TextStyle(fontSize: 20))
]));
})));
}
}
更多关于Flutter二维码扫描插件flutter_bar_scanner_alternative2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter二维码扫描插件flutter_bar_scanner_alternative2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_bar_scanner_alternative2
是一个用于在 Flutter 应用中扫描二维码和条形码的插件。它是 flutter_bar_scanner
插件的替代版本,提供了更简单的集成方式和更好的性能。以下是如何在 Flutter 项目中使用 flutter_bar_scanner_alternative2
插件的详细步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_bar_scanner_alternative2
的依赖。
dependencies:
flutter:
sdk: flutter
flutter_bar_scanner_alternative2: ^1.0.0
然后,运行 flutter pub get
来获取依赖。
2. 配置 Android 和 iOS 项目
对于 Android 和 iOS 项目,你可能需要进行一些配置。
Android
在 android/app/build.gradle
文件中,确保 minSdkVersion
至少为 21:
defaultConfig {
applicationId "com.example.yourapp"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
iOS
在 ios/Podfile
中,确保 platform
设置为 11.0
或更高:
platform :ios, '11.0'
然后,运行 flutter pub get
和 flutter build ios
以确保所有依赖项都已正确配置。
3. 使用插件
在你的 Flutter 项目中,你可以使用 flutter_bar_scanner_alternative2
来扫描二维码和条形码。
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_bar_scanner_alternative2/flutter_bar_scanner_alternative2.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ScannerScreen(),
);
}
}
class ScannerScreen extends StatefulWidget {
@override
_ScannerScreenState createState() => _ScannerScreenState();
}
class _ScannerScreenState extends State<ScannerScreen> {
String _scanResult = 'Scan a QR code or barcode';
Future<void> _scanQR() async {
try {
final result = await FlutterBarScannerAlternative2.scan();
setState(() {
_scanResult = result ?? 'No result';
});
} catch (e) {
setState(() {
_scanResult = 'Failed to scan: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('QR Code Scanner'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_scanResult),
SizedBox(height: 20),
ElevatedButton(
onPressed: _scanQR,
child: Text('Scan QR Code'),
),
],
),
),
);
}
}
4. 运行应用
现在你可以运行你的 Flutter 应用,点击按钮来扫描二维码或条形码。扫描结果将会显示在屏幕上。
5. 处理权限
在某些设备上,你可能需要请求相机权限。你可以使用 permission_handler
插件来处理权限请求。
首先,添加 permission_handler
依赖:
dependencies:
permission_handler: ^10.0.0
然后,在扫描之前请求相机权限:
import 'package:permission_handler/permission_handler.dart';
Future<void> _scanQR() async {
var status = await Permission.camera.status;
if (!status.isGranted) {
await Permission.camera.request();
}
if (await Permission.camera.isGranted) {
try {
final result = await FlutterBarScannerAlternative2.scan();
setState(() {
_scanResult = result ?? 'No result';
});
} catch (e) {
setState(() {
_scanResult = 'Failed to scan: $e';
});
}
} else {
setState(() {
_scanResult = 'Camera permission denied';
});
}
}