Flutter二维码与条形码扫描插件flutter_qr_bar_scanner的使用

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

Flutter二维码与条形码扫描插件flutter_qr_bar_scanner的使用

插件简介

flutter_qr_bar_scanner 是一个用于在Flutter应用中实现全屏扫描二维码和条形码的插件。它使用Google的Mobile Vision API来读取和扫描二维码/条形码,并通过Firebase的MLKit进行图像处理。该插件支持Android和iOS平台,能够直接从设备摄像头获取图像并显示预览。

Android 模型

在新版本的MLKit中,有两种不同的模型可以用于条形码扫描:

  1. 内置模型:默认使用内置模型,这会增加约2.2MB的代码大小,但扫描效果更好,并且不需要在后台下载额外的包。
  2. Google Play Services:可以通过Google Play Services动态下载模型。需要在AndroidManifest.xml中添加以下元数据:
    <application ...>
        ...
        <meta-data
            android:name="com.google.mlkit.vision.DEPENDENCIES"
            android:value="barcode" />
        <!-- 如果需要多个模型:android:value="barcode,model2,model3" -->
    </application>
    

iOS 64位支持

该插件仅支持iOS 64位设备。如果你需要支持iOS 11之前的版本,建议将iOS Deployment Target设置为11.0或更高版本。具体步骤如下:

  1. Podfile中添加以下行:
    platform :ios, '11.0'
    
  2. 确保Podfile底部设置了部署目标:
    post_install do |installer|
        installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['ENABLE_BITCODE'] = 'NO'
                config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
            end
        end
    end
    
  3. 在XCode中设置iOS Deployment Target为11.0。

使用示例

完整示例代码
import 'package:flutter/material.dart';
import 'package:flutter_qr_bar_scanner/qr_bar_scanner_camera.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter QR/Bar Code Reader',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter QR/Bar Code Reader'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);
  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? _qrInfo = 'Scan a QR/Bar code'; // 初始化提示信息
  bool _camState = false; // 控制相机状态

  // 扫描结果回调函数
  _qrCallback(String? code) {
    setState(() {
      _camState = false; // 停止相机预览
      _qrInfo = code; // 更新扫描结果
    });
  }

  // 启动扫描
  _scanCode() {
    setState(() {
      _camState = true; // 开启相机预览
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    _scanCode(); // 应用启动时自动开始扫描
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      body: _camState
          ? Center(
              child: SizedBox(
                height: 1000, // 设置相机预览的高度
                width: 500, // 设置相机预览的宽度
                child: QRBarScannerCamera(
                  onError: (context, error) => Text(
                    error.toString(), // 错误处理
                    style: TextStyle(color: Colors.red),
                  ),
                  qrCodeCallback: (code) {
                    _qrCallback(code); // 扫描结果回调
                  },
                ),
              ),
            )
          : Center(
              child: Text(_qrInfo!), // 显示扫描结果或提示信息
            ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_qr_bar_scanner插件进行二维码与条形码扫描的示例代码。这个插件允许你快速集成扫描功能到你的应用中。

首先,确保你的Flutter项目已经创建,并在pubspec.yaml文件中添加flutter_qr_bar_scanner依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_qr_bar_scanner: ^3.0.1  # 请检查最新版本号

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

接下来,在你的项目中,你需要配置权限,特别是在Android和iOS平台上。

Android配置

android/app/src/main/AndroidManifest.xml中添加相机权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

iOS配置

ios/Runner/Info.plist中添加相机使用描述:

<key>NSCameraUsageDescription</key>
<string>需要访问相机以扫描二维码和条形码</string>

Flutter代码实现

在你的主Dart文件中(例如main.dart),你可以按照以下步骤实现扫描功能:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScanPage(),
    );
  }
}

class ScanPage extends StatefulWidget {
  @override
  _ScanPageState createState() => _ScanPageState();
}

class _ScanPageState extends State<ScanPage> {
  String result = "";

  Future<void> _scanQRAndBarcode() async {
    String? scanResult = await FlutterQrBarScanner.scan();
    setState(() {
      result = scanResult ?? "取消扫描";
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("二维码与条形码扫描"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              result,
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _scanQRAndBarcode,
              child: Text("开始扫描"),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 权限配置:在Android和iOS平台上配置了必要的相机权限。
  2. 依赖导入:在pubspec.yaml文件中添加了flutter_qr_bar_scanner依赖。
  3. UI实现
    • 创建了一个简单的Flutter应用,其中包含一个按钮和一个显示扫描结果的文本。
    • 点击按钮时,调用_scanQRAndBarcode方法,启动扫描功能。
    • 扫描完成后,将结果显示在屏幕上。

这个示例提供了一个基本的二维码和条形码扫描功能,你可以根据需要进行扩展和自定义。

回到顶部