Flutter条形码扫描插件flutter_barcode_scanner_sit的使用

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

Flutter条形码扫描插件flutter_barcode_scanner_sit的使用

介绍

这是一个为Flutter应用添加条形码扫描支持的插件,适用于Android和iOS平台。

尝试示例

只需克隆或下载仓库,在Android Studio/VS Code中打开项目,打开pubspec.yaml并点击Packages get。连接设备并运行。要在iPhone上运行,需要从Xcode首次运行,并在example/ios中执行pod install,然后从Xcode运行。

新功能

⚡ 现在也可以与local_auth一起使用。

开始使用

请按照以下步骤进行Android和iOS的配置。 请注意,仔细遵循iOS步骤。

Android

⚡ 不用担心,你不需要做任何事情。

iOS - 需要Swift支持

部署目标:12

1. 重新开始:
  1. 创建一个新的Flutter项目,请检查是否包括包含iOS代码的Swift支持
  2. 创建新的Flutter项目后,在Xcode中打开/ios项目,将最低部署目标设置为12,并将Swift版本设置为5
  3. 设置好部署目标和Swift版本后,关闭Xcode,然后在Flutter项目的/ios目录下运行pod install

完成基本配置后,继续阅读如何使用部分。

2. 添加到现有Flutter应用:
如果你的现有iOS代码是Swift,则只需要执行以下操作。
  1. 最小部署目标设置为12,并将Swift版本设置为5
  2. 关闭Xcode并在Flutter项目的/ios目录下运行pod install
  3. 现在继续阅读如何使用部分。
如果你的现有iOS代码是Objective-C,则需要执行以下操作。
  1. 在不同位置创建一个具有相同名称的新Flutter项目(创建时不要忘记检查包含iOS代码的Swift支持)。
  2. 只需复制新创建的/ios文件夹并替换现有的/ios
  3. 在Xcode中打开iOS项目,将最小部署目标设置为12,并将Swift版本设置为5
  4. /ios中运行pod install

注意:如果你之前对iOS部分进行了更改,可能需要再次进行这些配置。

如何使用?

要在iOS上使用,你需要添加相机使用描述。为此,请在Xcode中打开并添加相机使用描述到Info.plist

<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>

在Android和iOS中进行更改后,将flutter_barcode_scanner_sit添加到pubspec.yaml中。

dependencies:
  ...
  flutter_barcode_scanner_sit: ^1.0.4
一次性扫描
  1. 首先需要导入包。
import 'package:flutter_barcode_scanner_sit/flutter_barcode_scanner.dart';
  1. 然后使用scanBarcode方法访问条形码扫描。
String barcodeScanRes = await FlutterBarcodeScanner.scanBarcode(
                                                    COLOR_CODE, 
                                                    CANCEL_BUTTON_TEXT, 
                                                    isShowFlashIcon, 
                                                    scanMode);

在这里scanBarcode中,

  • COLOR_CODE 是十六进制颜色,是条形码叠加层中的线条颜色,可以传递任意颜色。
  • CANCEL_BUTTON_TEXT 是屏幕上取消按钮的文本,可以传递任意文本和语言。
  • isShowFlashIcon 是布尔值,用于显示或隐藏闪光灯图标。
  • scanMode 是枚举类型,用户可以传递 { QR, BARCODE, DEFAULT } 中的任何一个,如果未传递,则默认值为 QR。它显示条形码和QR的图形叠加层。

注意:目前,scanMode 仅用于显示条形码和QR的图形叠加层。选择任何模式都会同时扫描QR和条形码。

连续扫描

如果你需要在不关闭摄像头的情况下连续扫描条形码,请使用FlutterBarcodeScanner.getBarcodeStreamReceiver,参数与FlutterBarcodeScanner.scanBarcode相同。

例如:

FlutterBarcodeScanner.getBarcodeStreamReceiver("#ff6666", "Cancel", false, ScanMode.DEFAULT)
         .listen((barcode) { 
         /// 使用条形码
         });

示例代码

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_barcode_scanner_sit/flutter_barcode_scanner.dart';
import 'package:local_auth/local_auth.dart';

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _scanBarcode = 'Unknown';

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  Future<void> startBarcodeScanStream() async {
    FlutterBarcodeScanner.getBarcodeStreamReceiver(
            '#ff6666', 'Cancel', true, ScanMode.BARCODE)!
        .listen((barcode) => print(barcode)); // 打印扫描结果
  }

  Future<void> scanQR() async {
    String barcodeScanRes;
    try {
      barcodeScanRes = await FlutterBarcodeScanner.scanBarcode(
          '#ff6666', 'Cancel', true, ScanMode.QR); // 扫描二维码
      print(barcodeScanRes);
    } on PlatformException {
      barcodeScanRes = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() {
      _scanBarcode = barcodeScanRes; // 更新扫描结果
    });
  }

  Future<void> scanBarcodeNormal() async {
    String barcodeScanRes;
    try {
      barcodeScanRes = await FlutterBarcodeScanner.scanBarcode(
          '#ff6666', 'Cancel', true, ScanMode.BARCODE); // 正常扫描条形码
      print(barcodeScanRes);
    } on PlatformException {
      barcodeScanRes = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() {
      _scanBarcode = barcodeScanRes; // 更新扫描结果
    });
  }

  Future<void> _authenticate() async {
    final LocalAuthentication auth = LocalAuthentication();

    bool authenticated = false;
    try {
      authenticated = await auth.authenticate(
        localizedReason: 'Let OS determine authentication method',
        options: const AuthenticationOptions(
          stickyAuth: true,
        ),
      );
      print(authenticated.toString());
    } on PlatformException catch (e) {
      print(e);
      return;
    }
    if (!mounted) {
      return;
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Barcode scan')),
        body: Builder(builder: (BuildContext context) {
          return Container(
              alignment: Alignment.center,
              child: Flex(
                  direction: Axis.vertical,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    ElevatedButton(
                        onPressed: () => scanBarcodeNormal(),
                        child: Text('Start barcode scan')), // 启动条形码扫描
                    ElevatedButton(
                        onPressed: () => scanQR(),
                        child: Text('Start QR scan')), // 启动二维码扫描
                    ElevatedButton(
                        onPressed: () => startBarcodeScanStream(),
                        child: Text('Start barcode scan stream')), // 启动条形码扫描流
                    ElevatedButton(
                        onPressed: () => _authenticate(),
                        child: Text('_authenticate')), // 身份验证
                    Text('Scan result : $_scanBarcode\n',
                        style: TextStyle(fontSize: 20)) // 显示扫描结果
                  ]));
        }),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_barcode_scanner_sit插件进行条形码扫描的示例代码。请确保您已经按照插件的官方文档完成了必要的安装和配置步骤。

1. 添加依赖

首先,在您的pubspec.yaml文件中添加flutter_barcode_scanner_sit依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_barcode_scanner_sit: ^x.y.z  # 请替换为最新版本号

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

2. 配置Android和iOS权限

确保在AndroidManifest.xmlInfo.plist中配置了必要的权限,例如相机权限。这通常在使用相机相关的插件时自动提示,但最好还是检查一下。

3. 使用插件进行条形码扫描

以下是一个简单的示例,展示如何在Flutter应用中使用flutter_barcode_scanner_sit插件进行条形码扫描:

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

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

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

class BarcodeScannerScreen extends StatefulWidget {
  @override
  _BarcodeScannerScreenState createState() => _BarcodeScannerScreenState();
}

class _BarcodeScannerScreenState extends State<BarcodeScannerScreen> {
  String _result = '';

  Future<void> _scanBarcode() async {
    String result = await FlutterBarcodeScannerSit.scanBarcode(
      '#FF0000', // 可选:指定扫描框的颜色
      'Cancel',  // 可选:取消按钮的文本
      true,      // 可选:是否显示闪光灯按钮
      true,      // 可选:是否显示相册按钮(从相册选择图片进行扫描)
      'Beep',    // 可选:扫描成功时的提示音(可设置为空字符串以禁用提示音)
    );

    // 更新UI以显示扫描结果
    setState(() {
      _result = result;
    });
  }

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

解释

  1. 依赖添加:在pubspec.yaml文件中添加flutter_barcode_scanner_sit依赖。
  2. UI设计:创建了一个简单的Flutter应用,包含一个文本显示扫描结果和一个按钮触发扫描操作。
  3. 扫描功能:在_scanBarcode方法中调用FlutterBarcodeScannerSit.scanBarcode进行条形码扫描。该方法返回扫描到的条形码内容,然后更新UI显示结果。

请确保您已经按照插件的官方文档处理了必要的权限和配置。此代码提供了一个基本的框架,您可以根据实际需求进一步扩展和修改。

回到顶部