Flutter条码扫描与处理插件gtin_toolkit的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter条码扫描与处理插件gtin_toolkit的使用

GTIN Toolkit 是一个用于验证和生成GTIN(全球贸易项目代码)的工具包。它旨在稳定、易于使用且尽可能快速。

特性

该库目前可以实现以下功能:

  • 验证
    验证包括类型在内的GTIN,如 SSCCGSINGTIN-14GTIN-13GTIN-12GTIN-8

  • 生成随机有效的GTIN
    只需要给出GTIN的位数即可,例如对于 SSCC 使用18位数字。

  • 分类GTIN
    使用长度来分类 SSCCGSINGTIN-14GTIN-13GTIN-12GTIN-8

使用示例

import 'package:gtin_toolkit/gtin_toolkit.dart' as gtinTool;
import 'package:test/test.dart';

void main() {
  test('All methods are being exported correctly', () {
    // 生成一个长度为12位的有效GTIN号码
    String validGtin = gtinTool.generateGTIN(gtinLength: 12);
    // 通过替换最后两位数字为1来制造无效GTIN
    String invalidGtin = validGtin.padRight(10).padRight(13, '1');

    List<int> validGtinArray = validGtin.split('').map(int.parse).toList();
    List<int> invalidGtinArray = invalidGtin.split('').map(int.parse).toList();

    // 验证有效GTIN
    expect(gtinTool.parseAndValidate(validGtin), true);
    expect(gtinTool.isValidGTIN(validGtinArray), true);

    // 验证无效GTIN
    expect(gtinTool.parseAndValidate(invalidGtin), false);
    expect(gtinTool.isValidGTIN(invalidGtinArray), false);

    // 生成一个长度为14位的GTIN
    expect(gtinTool.generateGTIN().length, 14);
    
    // 分类有效GTIN
    expect(gtinTool.classifyGTIN(validGtin)['name'], 'GTIN-12');
    
    // 确保测试通过
    expect(true, true);
  });
}

示例代码

以下是从源代码仓库中提取的一个完整的示例代码:

import 'package:gtin_toolkit/gtin_toolkit.dart' as gtinTool;

void main() {
  // 生成一个长度为12位的有效GTIN号码
  String validGtin = gtinTool.generateGTIN(gtinLength: 12);
  // 通过替换最后两位数字为1来制造无效GTIN
  String invalidGtin = validGtin.padRight(10).padRight(13, '1');

  List<int> validGtinArray = validGtin.split('').map(int.parse).toList();
  List<int> invalidGtinArray = invalidGtin.split('').map(int.parse).toList();

  print('生成的GTIN:');
  print(validGtin);
  print('生成的GTIN类型:');
  print(gtinTool.classifyGTIN(validGtin));

  // 验证有效GTIN
  gtinTool.parseAndValidate(validGtin);
  gtinTool.isValidGTIN(validGtinArray);

  // 验证无效GTIN
  gtinTool.parseAndValidate(invalidGtin);
  gtinTool.isValidGTIN(invalidGtinArray);
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用gtin_toolkit插件进行条码扫描与处理的示例代码。gtin_toolkit是一个专门用于处理GTIN(Global Trade Item Number,全球贸易项目代码)条码的Flutter插件。

首先,确保你已经在pubspec.yaml文件中添加了gtin_toolkit依赖:

dependencies:
  flutter:
    sdk: flutter
  gtin_toolkit: ^最新版本号  # 请替换为实际发布的最新版本号

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

接下来,你可以创建一个简单的Flutter应用来演示如何使用gtin_toolkit进行条码扫描和处理。

import 'package:flutter/material.dart';
import 'package:gtin_toolkit/gtin_toolkit.dart';
import 'package:camera/camera.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'GTIN Toolkit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: BarcodeScannerPage(),
    );
  }
}

class BarcodeScannerPage extends StatefulWidget {
  @override
  _BarcodeScannerPageState createState() => _BarcodeScannerPageState();
}

class _BarcodeScannerPageState extends State<BarcodeScannerPage> {
  final List<CameraDescription> cameras = [];
  CameraController? controller;
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
  QRViewController? qrViewController;

  @override
  void initState() {
    super.initState();
    availableCameras().then((availableCameras) {
      cameras.addAll(availableCameras);
      if (cameras.isNotEmpty) {
        controller = CameraController(cameras.first, ResolutionPreset.medium);
        controller!.initialize().then((_) {
          if (mounted) {
            setState(() {});
          }
        });
      }
    }).catchError((err) {
      print('Error: $err.code\n${err.message}');
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    qrViewController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (controller == null || !controller!.value.isInitialized) {
      return Container();
    }

    return Scaffold(
      appBar: AppBar(
        title: Text('GTIN Toolkit Demo'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            flex: 5,
            child: AspectRatio(
              aspectRatio: controller!.value.aspectRatio,
              child: CameraPreview(controller!),
            ),
          ),
          Expanded(
            flex: 1,
            child: QRView(
              key: qrKey,
              controller: qrViewController,
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          try {
            String? barcode = await _scanBarcode(context);
            if (barcode != null) {
              GTIN? gtin = GTIN.parse(barcode);
              if (gtin != null) {
                showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                    title: Text('GTIN Information'),
                    content: Text('GTIN: ${gtin.code}\n'
                        'Type: ${gtin.type}\n'
                        'Checksum: ${gtin.checksumValid ? 'Valid' : 'Invalid'}'),
                    actions: <Widget>[
                      TextButton(
                        child: Text('OK'),
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                      ),
                    ],
                  ),
                );
              } else {
                showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                    title: Text('Error'),
                    content: Text('Invalid GTIN code: $barcode'),
                    actions: <Widget>[
                      TextButton(
                        child: Text('OK'),
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                      ),
                    ],
                  ),
                );
              }
            }
          } catch (e) {
            print('Error scanning barcode: $e');
            showDialog(
              context: context,
              builder: (context) => AlertDialog(
                title: Text('Error'),
                content: Text('Failed to scan barcode'),
                actions: <Widget>[
                  TextButton(
                    child: Text('OK'),
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                  ),
                ],
              ),
            );
          }
        },
        tooltip: 'Scan Barcode',
        child: Icon(Icons.scan_wifi),
      ),
    );
  }

  Future<String?> _scanBarcode(BuildContext context) async {
    // 这里应该实现一个条码扫描逻辑,但`gtin_toolkit`本身不提供扫描功能,
    // 所以这里假设你已经通过其他方式(如`camera`和`qr_code_scanner`插件)获取到了条码字符串。
    // 这里只是为了演示如何处理GTIN条码,所以直接返回一个示例条码字符串。
    // 在实际使用中,你需要替换这部分代码以获取真实的条码数据。
    // 例如,使用`qr_code_scanner`插件扫描到的条码数据。
    // 注意:`qr_code_scanner`主要用于QR码,对于其他类型的条码,你可能需要使用其他插件如`barcode_scan`。
    // 由于`gtin_toolkit`专注于GTIN条码的处理,所以这里假设你已经有了条码字符串。
    return '1234567890128'; // 示例GTIN-13条码
  }
}

注意

  1. 上面的代码示例中,_scanBarcode函数仅返回了一个示例GTIN条码字符串。在实际应用中,你需要使用适当的条码扫描插件(如barcode_scan)来获取真实的条码数据。
  2. qr_code_scanner插件主要用于QR码扫描,对于其他类型的条码(如EAN-13, UPC-A等),建议使用barcode_scan插件。
  3. 由于gtin_toolkit专注于GTIN条码的解析和校验,因此它不提供条码扫描功能。

为了完整实现条码扫描功能,你可能需要整合barcode_scan插件或其他适当的条码扫描库,并将扫描到的条码字符串传递给GTIN.parse方法进行处理。

回到顶部