Flutter条形码扫描与生成插件barcode_flutter的使用

发布于 1周前 作者 htzhanglong 来自 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

  • 初始发布。

功能特性

  • 支持以下条形码类型:Code39Code93Code128EAN13EAN8UPCAUPCE
  • 支持带或不带文本标签的渲染。
  • 支持调整条形码的宽度。
  • 不需要互联网连接即可使用。

安装

要将插件添加到您的项目中,请在 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

1 回复

更多关于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>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!