插件介绍

qr_code_scanner是一个功能强大的Flutter插件,用于在鸿蒙平台上实现二维码扫描功能。该插件基于qr_code_scanner开发,提供了跨平台的二维码扫描能力,支持鸿蒙、iOS和Android平台。

主要功能特点:

  • 实时二维码扫描
  • 支持多种条形码格式
  • 相机切换功能
  • 闪光灯控制
  • 扫描结果实时回调
  • 自定义扫描界面

如何使用插件

1. 包的引入

由于该三方库为自定义修改版本,需要以git形式引入。在引用的项目中,pubspec.yaml中dependencies新增配置:

dependencies:
  qr_code_scanner_ohos:
    git:
      url: "https://atomgit.com/"
      path: "fluttertpc_qr_code_scanner-master/ohos"

执行命令安装依赖:

flutter pub get

2. 权限配置

2.1 添加相机权限

打开entry/src/main/module.json5,添加相机权限配置:

"requestPermissions": [
  {
    "name": "ohos.permission.CAMERA",
    "reason": "$string:camera_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when":"inuse"
    }
  }
]
2.2 添加权限说明

打开entry/src/main/resources/base/element/string.json,添加权限说明:

{
  "string": [
    {
      "name": "camera_reason",
      "value": "使用相机"
    }
  ]
}

3. API的调用

3.1 基本使用示例
import 'package:flutter/material.dart';
import 'package:qr_code_scanner_ohos/qr_code_scanner_ohos.dart';

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

  
  State<StatefulWidget> createState() => _QRViewExampleState();
}

class _QRViewExampleState extends State<QRViewExample> {
  Barcode? result;
  QRViewController? controller;
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');

  
  void reassemble() {
    super.reassemble();
    if (defaultTargetPlatform == TargetPlatform.ohos) {
      controller!.pauseCamera();
    }
    controller!.resumeCamera();
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(flex: 4, child: _buildQrView(context)),
          Expanded(
            flex: 1,
            child: Center(
              child: (result != null)
                  ? Text(
                      'Barcode Type: ${describeEnum(result!.format)}   Data: ${result!.code}')
                  : const Text('Scan a code'),
            ),
          )
        ],
      ),
    );
  }

  Widget _buildQrView(BuildContext context) {
    return QRView(
      key: qrKey,
      onQRViewCreated: _onQRViewCreated,
      overlay: QrScannerOverlayShape(
          borderColor: Colors.red,
          borderRadius: 10,
          borderLength: 30,
          borderWidth: 10,
          cutOutSize: 300),
    );
  }

  void _onQRViewCreated(QRViewController controller) {
    setState(() {
      this.controller = controller;
    });
    controller.scannedDataStream.listen((scanData) {
      setState(() {
        result = scanData;
      });
    });
  }

  
  void dispose() {
    controller?.dispose();
    super.dispose();
  }
}
3.2 常用API示例
// 切换相机
await controller?.flipCamera();

// 切换闪光灯
await controller?.toggleFlash();

// 获取闪光灯状态
final flashStatus = await controller?.getFlashStatus();

// 暂停相机
await controller?.pauseCamera();

// 恢复相机
await controller?.resumeCamera();

API说明

方法名 描述 返回值 鸿蒙支持
getCameraInfo 获取当前使用的相机信息 Future<CameraFacing> yes
flipCamera 切换前后摄像头 Future<CameraFacing> yes
getFlashStatus 获取闪光灯状态 Future<bool?> yes
toggleFlash 切换闪光灯开关 Future<void> yes
pauseCamera 暂停相机和扫描 Future<void> yes
stopCamera 停止相机和扫描 Future<void> yes
resumeCamera 恢复扫描 Future<void> yes
scannedDataStream 扫描结果流 Stream<Barcode> yes

约束与限制

兼容性

在以下版本中已测试通过:

  • Flutter: 3.7.12-ohos-1.0.6; SDK: 5.0.0(12); IDE: DevEco Studio: 5.0.13.200; ROM: 5.1.0.120 SP3;
  • Flutter: 3.22.1-ohos-1.0.1; SDK: 5.0.0(12); IDE: DevEco Studio: 5.0.13.200; ROM: 5.1.0.120 SP3;

总结

qr_code_scanner为鸿蒙平台提供了强大的二维码扫描功能,使开发者能够轻松实现实时二维码扫描功能。该插件具有良好的跨平台兼容性,使用方法一致,大大提高了开发效率。

通过本文的介绍,您可以快速上手使用qr_code_scanner,实现二维码扫描功能。如果您在使用过程中遇到问题,可以参考插件的示例代码或社区文档。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐