Flutter快速条形码扫描插件icapps_fast_barcode_scanner的使用

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

Flutter快速条形码扫描插件icapps_fast_barcode_scanner的使用

icapps_fast_barcode_scanner 是一个基于 MLKit(Android)和 AVFoundation(iOS)的快速条形码扫描插件。该插件将UI设计留给了用户,但提供了对相机预览的访问。

注意:此插件仍在开发中,某些API可能尚未可用。如果您有任何问题、想法或建议,请在 GitHub 上创建一个issue或pull request。我自己也在生产环境中使用该插件,并会继续积极开发和维护它。

此插件要求 iOS 10.0 及以上版本,Android SDK 版本 21 或更高版本。

安装

pubspec.yaml 文件中添加以下依赖项:

dependencies:
  icapps_fast_barcode_scanner: ^1.1.0
iOS 配置

ios/Runner/Info.plist 文件中添加 NSCameraUsageDescription 键:

<key>NSCameraUsageDescription</key>
<string>此应用需要访问您的手机摄像头以扫描条形码</string>
Android 配置

android/app/build.gradle 文件中设置最低SDK版本为21或更高:

android {
    defaultConfig {
        minSdkVersion 21
    }
}

使用

icapps_fast_barcode_scanner 包含两个主要类:CameraControllerBarcodeCamera

完整的示例如下:

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

class MyScannerScreen extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(title: Text('条形码扫描器')),
            body: BarcodeCamera(
                types: const [
                    BarcodeType.ean8,
                    BarcodeType.ean13,
                    BarcodeType.code128
                ],
                resolution: Resolution.hd720,
                framerate: Framerate.fps30,
                mode: DetectionMode.pauseVideo,
                onScan: (code) => print(code),
                children: [
                    MaterialPreviewOverlay(animateDetection: false),
                    BlurPreviewOverlay(),
                    Positioned(
                      child: ElevatedButton(
                        onPressed: () =>
                            CameraController.instance.resumeDetector(),
                        child: Text('恢复'),
                      ),
                    )
                ],
            )
        );
    }
}

在上面的代码中,有两个覆盖层在 children 列表中。这两个覆盖层包含在包中:

  • MaterialPreviewOverlay 模仿了官方的材料设计条形码扫描示例。
  • BlurPreviewOverlay 在检测到条形码时模糊屏幕,并在恢复时取消模糊。这些是正常的Widget,它们显示在相机预览之上。查看它们的源代码可以找到如何响应来自条形码扫描器的事件。

CameraController

CameraController 单例管理相机。它处理所有低级操作,如与本地代码通信。它作为单例实现是为了保证始终有一个且相同的控制器来管理相机。可以通过 CameraController.instance 属性访问控制器。这些是可以访问的方法:

方法 描述
initialize 使用提供的配置初始化扫描器
pauseDetector 主动暂停扫描器
resumeDetector 从暂停状态恢复扫描器
toggleTorch 开关手电筒
dispose 停止并重置平台级别的相机

如果你使用 BarcodeCamera 小部件,你不必自己调用 initialize

CameraState

CameraController.instance.state 包含扫描器的当前状态。你可以使用它来构建自己的覆盖层。可以访问的信息如下:

属性 描述
isInitialized 表示相机是否已初始化
previewConfig 当前使用的 PreviewConfiguration
eventNotifier 用于响应初始化或检测代码的事件通知器
torchState 手电筒的当前状态(开/关)
hasError 表示 error 是否为空
error 访问上一次产生的错误

BarcodeCamera

BarcodeCamera 是一个显示相机视频流预览的小部件。它在后台调用 CameraController 进行初始化和配置。

所有可能的配置(要么传递给 BarcodeCamera,要么传递给 CameraController.initialize)如下:

属性 描述
types 要扫描的条形码类型(参见 BarcodeType
mode 是否在检测到条形码时暂停相机
resolution 相机视频流的分辨率
framerate 相机视频流的帧率
position 选择后置或前置摄像头(仅限iOS)
onScan 条形码被扫描时的回调
children 显示在预览之上的小部件

示例代码

example/lib/main.dart 文件中的示例代码如下:

import 'package:flutter/material.dart';

import 'scanner_screen.dart';

void main() {
  runApp(const MaterialApp(home: ScannerScreen()));
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用icapps_fast_barcode_scanner插件来实现快速条形码扫描的一个简单示例。这个插件允许你快速集成条形码扫描功能到你的Flutter应用中。

首先,确保你的Flutter项目已经创建并运行。然后,按照以下步骤操作:

1. 添加依赖

在你的pubspec.yaml文件中添加icapps_fast_barcode_scanner依赖:

dependencies:
  flutter:
    sdk: flutter
  icapps_fast_barcode_scanner: ^最新版本号  # 请替换为最新版本号

运行flutter pub get来安装依赖。

2. 导入插件

在你想要使用条形码扫描功能的Dart文件中导入插件:

import 'package:icapps_fast_barcode_scanner/icapps_fast_barcode_scanner.dart';

3. 使用插件进行扫描

下面是一个简单的示例,展示了如何启动条形码扫描器并处理扫描结果:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('条形码扫描示例'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 启动条形码扫描
              String? result = await IcappsFastBarcodeScanner.scan();
              
              // 处理扫描结果
              if (result != null) {
                // 显示扫描结果
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('扫描结果: $result')),
                );
              } else {
                // 处理取消或错误情况
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('扫描取消或发生错误')),
                );
              }
            },
            child: Text('扫描条形码'),
          ),
        ),
      ),
    );
  }
}

4. 运行应用

确保你的设备或模拟器已经连接,并运行flutter run来启动应用。点击“扫描条形码”按钮,应该会启动条形码扫描界面。扫描成功后,扫描结果会显示为一个SnackBar消息。

注意事项

  • 确保你的设备或模拟器具有相机权限。
  • 在实际应用中,你可能需要处理更多的错误情况和用户交互,比如请求权限、显示加载指示器等。

这个示例展示了如何使用icapps_fast_barcode_scanner插件进行基本的条形码扫描。根据你的具体需求,你可以进一步定制和扩展这个功能。

回到顶部