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

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

简介

barcode 是一个用于Dart的条形码生成库,可以为任何后端生成通用的绘图操作。以下是关于如何在Flutter中使用此插件生成和显示条形码的指南。

这些工具都依赖于 barcode 库来生成绘图操作。

生成条形码

以下是如何创建条形码并将其保存为SVG文件的示例代码:

示例1:创建DataMatrix条形码

import 'dart:io';
import 'package:barcode/barcode.dart';

void main() async {
  // 创建一个DataMatrix条形码
  final Barcode dm = Barcode.dataMatrix();

  // 生成包含 "Hello World!" 的SVG条形码
  final String svg = dm.toSvg('Hello World!', width: 200, height: 200);

  // 保存SVG文件
  await File('barcode.svg').writeAsString(svg);
}

示例2:创建WIFI配置条形码

import 'dart:io';
import 'package:barcode/barcode.dart';

void main() async {
  // 创建一个DataMatrix条形码
  final Barcode dm = Barcode.dataMatrix();

  // 创建WIFI配置信息
  final MeCard me = MeCard.wifi(
    ssid: 'Wifi Name',
    password: 'password',
  );

  // 生成包含 WIFI 配置信息的SVG条形码
  final String svg = dm.toSvg(me.toString(), width: 200, height: 200);

  // 保存SVG文件
  await File('wifi.svg').writeAsString(svg);
}

支持的条形码类型

以下是支持的条形码类型的列表及示例图片:

1D 条形码

  • Code 39 CODE 39

  • Code 93 CODE 93

  • Code 128 A CODE 128 A

  • Code 128 B CODE 128 B

  • Code 128 C CODE 128 C

  • GS1-128 GS1 128

  • Interleaved 2 of 5 (ITF) ITF

  • ITF-14 ITF 14

  • ITF-16 ITF 16

  • EAN 13 EAN 13

  • EAN 8 EAN 8

  • EAN 2 EAN 2

  • EAN 5 EAN 5

  • ISBN ISBN

  • UPC-A UPC A

  • UPC-E UPC E

  • Telepen Telepen

  • Codabar Codabar

Height Modulated Barcodes

  • RM4SCC RM4SCC

2D 条形码

  • QR-Code QR-Code

  • PDF417 PDF417

  • Data Matrix Data Matrix

  • Aztec Aztec

完整示例Demo

下面是一个完整的示例,展示了如何生成多种类型的条形码并保存为SVG文件:

import 'dart:io';
import 'package:barcode/barcode.dart';

void buildBarcode(
  Barcode bc,
  String data, {
  String? filename,
  double? width,
  double? height,
  double? fontHeight,
}) {
  /// 创建条形码
  final svg = bc.toSvg(
    data,
    width: width ?? 200,
    height: height ?? 80,
    fontHeight: fontHeight,
  );

  // 保存图像
  filename ??= bc.name.replaceAll(RegExp(r'\s'), '-').toLowerCase();
  File('$filename.svg').writeAsStringSync(svg);
}

void main() {
  buildBarcode(
    Barcode.code39(),
    'CODE 39',
  );

  buildBarcode(
    Barcode.code93(),
    'CODE 93',
  );

  buildBarcode(
    Barcode.code128(useCode128B: false, useCode128C: false),
    'BARCODE\t128',
    filename: 'code-128a',
  );

  buildBarcode(
    Barcode.code128(useCode128A: false, useCode128C: false),
    'Barcode 128',
    filename: 'code-128b',
  );

  buildBarcode(
    Barcode.code128(useCode128A: false, useCode128B: false),
    '0123456789',
    filename: 'code-128c',
  );

  buildBarcode(
    Barcode.gs128(),
    '(420)22345(56780000000001)',
  );

  buildBarcode(
    Barcode.itf14(),
    '1540014128876',
  );

  buildBarcode(
    Barcode.itf16(),
    '154001412887678',
  );

  buildBarcode(
    Barcode.ean13(drawEndChar: true),
    '590123412345',
  );

  buildBarcode(
    Barcode.ean8(drawSpacers: true),
    '9638507',
    width: 100,
  );

  buildBarcode(
    Barcode.ean2(),
    '05',
    width: 40,
  );

  buildBarcode(
    Barcode.ean5(),
    '52495',
    width: 60,
  );

  buildBarcode(
    Barcode.isbn(drawEndChar: true),
    '978316148410',
  );

  buildBarcode(
    Barcode.upcA(),
    '98765432109',
  );

  buildBarcode(
    Barcode.upcE(),
    '06510000432',
    width: 100,
  );

  buildBarcode(
    Barcode.telepen(),
    'Telepen',
  );

  buildBarcode(
    Barcode.qrCode(),
    'QR-Code',
    height: 200,
  );

  buildBarcode(
    Barcode.codabar(explicitStartStop: true),
    'A1234-5678B',
  );

  buildBarcode(
    Barcode.pdf417(),
    'PDF417',
    height: 30,
  );

  buildBarcode(
    Barcode.dataMatrix(),
    'Datamatrix',
    height: 200,
  );

  buildBarcode(
    Barcode.aztec(),
    'Aztec',
    height: 200,
  );

  buildBarcode(
    Barcode.rm4scc(),
    'RM4SCC',
    height: 50,
    fontHeight: 30,
  );

  buildBarcode(
    Barcode.itf(),
    '987234',
  );
}

通过上述代码,您可以生成并保存多种类型的条形码为SVG文件。希望这对您有所帮助!如果有更多问题,欢迎继续提问。


更多关于Flutter条形码生成与扫描插件barcode的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter条形码生成与扫描插件barcode的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,生成和扫描条形码是一个常见的需求,可以使用barcode_scanbarcode_flutter等插件来实现。以下是如何在Flutter项目中集成这些插件并使用的代码示例。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  barcode_scan: ^3.0.1  # 用于条形码扫描
  barcode_flutter: ^2.0.0  # 用于条形码生成

然后运行flutter pub get来安装这些依赖。

2. 配置权限(仅针对Android)

对于条形码扫描功能,你需要在AndroidManifest.xml中添加相机权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <!-- 其他配置 -->

</manifest>

3. 生成条形码

使用barcode_flutter插件生成条形码。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:barcode_flutter/barcode_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Barcode Generator'),
        ),
        body: Center(
          child: BarcodeWidget(
            barcode: Barcode.ean13(
              data: '123456789102',
              width: 2.0,
              height: 100.0,
            ),
            colorBlack: Colors.black,
            colorWhite: Colors.white,
          ),
        ),
      ),
    );
  }
}

4. 扫描条形码

使用barcode_scan插件扫描条形码。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:barcode_scan/barcode_scan.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Barcode Scanner'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                final String result = await BarcodeScanner.scan();
                print("Barcode result: $result");
                // 在这里处理扫描结果,例如显示给用户
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text("Scanned: $result")),
                );
              } on PlatformException catch (e) {
                if (e.code == BarcodeScanner.CameraAccessDenied) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text("Camera permission was denied")),
                  );
                } else if (e.code == BarcodeScanner.Unavailable) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text("Camera is not available")),
                  );
                } else {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text("Unknown error: ${e.message}")),
                  );
                }
              }
            },
            child: Text('Scan Barcode'),
          ),
        ),
      ),
    );
  }
}

总结

以上代码展示了如何在Flutter中使用barcode_flutter插件生成条形码,并使用barcode_scan插件扫描条形码。你可以根据具体需求进一步定制这些功能,例如处理不同类型的条形码、优化UI设计等。

回到顶部