Flutter条形码扫描与生成插件barcode_flutter的使用
Flutter条形码扫描与生成插件barcode_flutter的使用
简介
Barcode Flutter 是一个用于通过自定义画布快速渲染条形码的 Flutter 库。
更新日志
1.1.2
- 增加了对 Codabar 的支持。
- 修复了 Code128 中值为 102 的错误模式(#20)。
1.1.0
- 增加了对 ITF 的支持。
- 增加了
BarCodeParams
类以支持未来的扩展性。
1.0.2
- 修复了 EAN8 条形码无效校验和的错误。
1.0.1
- 修复了当 Code128 包含字符 ‘M’ 时的扫描问题。
1.0.0
- 初始发布。
功能特性
- 支持以下条形码类型:Code39、Code93、Code128、EAN13、EAN8、UPCA、UPCE。
- 支持带或不带文本标签的渲染。
- 支持调整条形码的宽度。
- 不需要互联网连接即可使用。
安装
要将插件添加到您的项目中,请在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
barcode_flutter: ^1.1.2
添加依赖后,运行以下命令以获取包:
flutter packages get
或者使用 IDE 更新包。
使用入门
首先,在代码中导入插件:
import 'package:barcode_flutter/barcode_flutter.dart';
接下来,使用以下代码渲染条形码(例如 Code39):
BarCodeImage(
params: Code39BarCodeParams(
"1234ABCD", // 要编码的数据
lineWidth: 2.0, // 单个黑白条的宽度,默认值为 2.0
barHeight: 90.0, // 整个组件的高度,默认值为 100.0
withText: true, // 是否渲染文本标签,默认值为 false
),
onError: (error) { // 错误处理
print('error = $error');
},
);
注意事项
-
您只能通过调整
lineWidth
参数来改变整个组件的宽度。但是,小于<code>2.0</code>
的值可能会使条形码扫描器更难正确识别结果。2.0
是所有条形码类型的推荐安全值。 -
错误处理:必须确保提供的代码字符串有效。如果不确定数据来源(例如用户输入),请设置
onError
方法,并在其中放置错误处理逻辑。有时,库会在数据无效时渲染部分条形码,如果发生这种情况,无法保证结果可以被条形码扫描器识别。
示例代码
以下是一个完整的示例代码,展示如何使用 barcode_flutter
插件生成不同类型的条形码:
import 'package:flutter/material.dart';
import 'package:barcode_flutter/barcode_flutter.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Barcode Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(
barcodes: [
BarCodeItem(
description: "Code39 with text",
image: BarCodeImage(
params: Code39BarCodeParams(
"CODE39",
withText: true,
),
),
),
BarCodeItem(
description: "Code39",
image: BarCodeImage(
params: Code39BarCodeParams(
"CODE39",
),
),
),
BarCodeItem(
description: "Code93 with text",
image: BarCodeImage(
params: Code93BarCodeParams(
"CODE93",
withText: true,
),
),
),
BarCodeItem(
description: "Code93",
image: BarCodeImage(
params: Code93BarCodeParams(
"CODE93",
),
),
),
BarCodeItem(
description: "Code128 with text",
image: BarCodeImage(
params: Code128BarCodeParams(
"CODE128",
withText: true,
),
),
),
BarCodeItem(
description: "Code128",
image: BarCodeImage(
params: Code128BarCodeParams(
"CODE128",
),
),
),
BarCodeItem(
description: "EAN8 with text",
image: BarCodeImage(
params: EAN8BarCodeParams(
"65833254",
withText: true,
),
),
),
BarCodeItem(
description: "EAN8",
image: BarCodeImage(
params: EAN8BarCodeParams(
"65833254",
),
),
),
BarCodeItem(
description: "EAN13 with text",
image: BarCodeImage(
params: EAN13BarCodeParams(
"9501101530003",
withText: true,
),
),
),
BarCodeItem(
description: "EAN13",
image: BarCodeImage(
params: EAN13BarCodeParams(
"9501101530003",
),
),
),
BarCodeItem(
description: "UPCA with text",
image: BarCodeImage(
params: UPCABarCodeParams(
"123456789012",
withText: true,
),
),
),
BarCodeItem(
description: "UPCA",
image: BarCodeImage(
params: UPCABarCodeParams(
"123456789012",
),
),
),
BarCodeItem(
description: "UPCE with text",
image: BarCodeImage(
params: UPCEBarCodeParams(
"00123457",
withText: true,
),
),
),
BarCodeItem(
description: "UPCE",
image: BarCodeImage(
params: UPCEBarCodeParams(
"00123457",
),
),
),
BarCodeItem(
description: "ITF with text",
image: BarCodeImage(
params: ITFBarCodeParams(
"133175398642265258",
withText: true,
),
),
),
BarCodeItem(
description: "ITF",
image: BarCodeImage(
params: ITFBarCodeParams(
"133175398642265258",
),
),
),
BarCodeItem(
description: "Codabar with text",
image: BarCodeImage(
params: CodabarBarCodeParams(
"A123456789B",
withText: true,
),
),
),
BarCodeItem(
description: "Codabar",
image: BarCodeImage(
params: CodabarBarCodeParams(
"A123456789B",
),
),
),
],
),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({this.barcodes});
final List<BarCodeItem> barcodes;
final String title = "BarCode Flutter";
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView(
children: widget.barcodes.map((element) {
return Padding(
padding: const EdgeInsets.all(10.0),
child: Card(
child: Column(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Text(
element.description,
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20.0,
color: Colors.black45,
),
),
),
Center(
child: Container(
padding: const EdgeInsets.all(10.0),
child: element.image,
),
)
],
),
),
);
}).toList(),
),
);
}
}
class BarCodeItem {
String description;
BarCodeImage image;
BarCodeItem({
this.image,
this.description,
});
}
更多关于Flutter条形码扫描与生成插件barcode_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter条形码扫描与生成插件barcode_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
barcode_flutter
是一个用于在 Flutter 应用中生成和扫描条形码的插件。它支持多种条形码格式,如 QR Code、Code 39、Code 128 等。以下是如何在 Flutter 项目中使用 barcode_flutter
插件的详细步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 barcode_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
barcode_flutter: ^2.0.0
然后运行 flutter pub get
来安装依赖。
2. 生成条形码
barcode_flutter
提供了 BarcodeWidget
来生成条形码。以下是一个简单的示例,展示如何生成一个 QR Code:
import 'package:flutter/material.dart';
import 'package:barcode_flutter/barcode_flutter.dart';
class BarcodeGeneratorPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Barcode Generator'),
),
body: Center(
child: BarcodeWidget(
barcode: Barcode.qrCode(), // 使用 QR Code
data: 'https://flutter.dev', // 要编码的数据
width: 200,
height: 200,
),
),
);
}
}
3. 扫描条形码
barcode_flutter
也支持条形码扫描功能。以下是一个简单的示例,展示如何使用 BarcodeScanner
来扫描条形码:
import 'package:flutter/material.dart';
import 'package:barcode_flutter/barcode_flutter.dart';
class BarcodeScannerPage extends StatefulWidget {
@override
_BarcodeScannerPageState createState() => _BarcodeScannerPageState();
}
class _BarcodeScannerPageState extends State<BarcodeScannerPage> {
String _scanResult = 'Scan a barcode';
Future<void> _scanBarcode() async {
try {
final result = await BarcodeScanner.scan();
setState(() {
_scanResult = result;
});
} catch (e) {
setState(() {
_scanResult = 'Failed to scan: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Barcode Scanner'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_scanResult),
SizedBox(height: 20),
ElevatedButton(
onPressed: _scanBarcode,
child: Text('Scan Barcode'),
),
],
),
),
);
}
}
4. 运行应用
将上述代码添加到你的 Flutter 项目中,并运行应用。你应该能够生成和扫描条形码。
5. 支持的条形码格式
barcode_flutter
支持多种条形码格式,包括但不限于:
- QR Code (
Barcode.qrCode()
) - Code 39 (
Barcode.code39()
) - Code 128 (
Barcode.code128()
) - EAN 13 (
Barcode.ean13()
) - UPC-A (
Barcode.upcA()
)
你可以根据需要选择合适的条形码格式。
6. 注意事项
-
在 Android 上,扫描功能需要相机权限。确保在
AndroidManifest.xml
中添加以下权限:<uses-permission android:name="android.permission.CAMERA" />
-
在 iOS 上,扫描功能需要相机权限。确保在
Info.plist
中添加以下键值对:<key>NSCameraUsageDescription</key> <string>We need access to your camera to scan barcodes</string>