Flutter条形码账单扫描插件barcode_bill_scanner的使用

Flutter条形码账单扫描插件 barcode_bill_scanner 的使用

简介

Barcode Bill Scanner 是一个专门为Flutter开发的条形码扫描插件,主要用于巴西的应用程序中从水平条形码(主要是账单)中获取可读代码。巴西的条形码格式由FEBRABAN定义,该格式将常规的44位代码转换为47~48位字符长度的代码。此插件默认将条形码转换为FEBRABAN格式,但可以根据需要关闭此功能。

使用方法

以下是一个完整的示例Demo,展示了如何在Flutter项目中使用 barcode_bill_scanner 插件进行条形码扫描,并显示扫描结果。

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'BarcodeBillScanner Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? barcode; // 用于存储扫描到的条形码

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('条形码账单扫描'),
      ),
      body: Stack(
        alignment: Alignment.center,
        children: [
          BarcodeBillScanner(
            onActionLabel: "取消", // 设置取消操作的标签
            onSuccess: (String value) async {
              // 当成功扫描到条形码时,更新状态并显示扫描结果
              setState(() => barcode = value);
            },
            onCancel: () {
              // 当用户取消扫描时,重置条形码
              setState(() => barcode = null);
            },
          ),
          if (barcode != null)
            Center(
              child: RotatedBox(
                quarterTurns: 1, // 将文本旋转90度以适应竖屏显示
                child: Text(
                  barcode!,
                  textAlign: TextAlign.center,
                  style: const TextStyle(
                    fontSize: 20.0,
                    color: Colors.amber, // 设置扫描结果显示的颜色
                  ),
                ),
              ),
            ),
        ],
      ),
    );
  }
}

配置要求

iOS
  • 最低iOS部署目标: 10.0
  • Xcode版本: 12或更高
  • Swift版本: 5
  • ML Kit仅支持64位架构 (x86_64 和 arm64),因此需要排除32位架构 (i386 和 armv7)。

为了确保 flutter build iosflutter build ipa 能够正常运行,您需要在Xcode中排除 armv7 架构:

  1. 打开Xcode项目:

    • 选择 Runner 项目
    • 进入 Build Settings
    • Excluded Architectures 中添加 armv7
  2. 修改 Podfile 文件,确保其内容如下:

$iOSVersion = '10.0'

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=*]"] = "armv7"
    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
  end
  
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    
    target.build_configurations.each do |config|
      if Gem::Version.new($iOSVersion) > Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'])
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
      end
    end
  end
end

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用barcode_bill_scanner插件的示例代码案例。假设你已经创建了一个Flutter项目,并希望在应用中使用条形码账单扫描功能。

首先,你需要在pubspec.yaml文件中添加barcode_bill_scanner依赖项:

dependencies:
  flutter:
    sdk: flutter
  barcode_bill_scanner: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get以获取依赖项。

接下来,你可以在你的Flutter应用中使用barcode_bill_scanner插件。以下是一个简单的示例,展示了如何初始化插件并启动扫描功能:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Barcode Bill Scanner Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String scanResult = '';

  void startBarcodeBillScanner() async {
    try {
      // 启动条形码账单扫描
      String result = await BarcodeBillScanner.scan();
      setState(() {
        scanResult = result;
      });
    } catch (e) {
      print("Error scanning barcode bill: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Barcode Bill Scanner Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Scan Result:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 10),
            Text(
              scanResult,
              style: TextStyle(fontSize: 20, color: Colors.blue),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: startBarcodeBillScanner,
              child: Text('Scan Barcode Bill'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们首先在pubspec.yaml文件中添加了barcode_bill_scanner依赖项。
  2. MyApp类中,我们创建了一个简单的Flutter应用,其首页为MyHomePage
  3. MyHomePage类中,我们定义了一个字符串变量scanResult来存储扫描结果。
  4. startBarcodeBillScanner方法使用BarcodeBillScanner.scan()函数启动扫描功能,并将结果存储在scanResult变量中。
  5. build方法中,我们创建了一个简单的界面,显示扫描结果和一个按钮来触发扫描功能。

请注意,BarcodeBillScanner.scan()方法是一个异步函数,因此我们使用await关键字等待其完成,并使用try-catch块来处理可能的错误。

确保在实际使用时,你已经按照barcode_bill_scanner插件的文档正确配置了所需的权限(如相机权限),并且已经测试了在不同设备和平台上的兼容性。

回到顶部