Flutter二维码生成与展示插件qr_widget的使用

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

Flutter二维码生成与展示插件qr_widget的使用

简介

QR.Widget 是一个用于在Flutter中简单快速地渲染二维码的库。它通过Widget或自定义Painter来实现二维码的显示。

特性

  • 支持空安全
  • 基于 QR - Dart
  • 自动检测或手动输入二维码版本/类型
  • 支持二维码版本1-40
  • 错误校正/冗余
  • 可配置输出大小、填充、背景和前景颜色
  • 支持图像叠加
  • 导出到图像数据以保存到文件或内存中
  • 无需互联网连接

安装

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

dependencies:
  qr_widget: ^4.1.0

如果使用Flutter的 master 分支,可以使用以下配置:

dependencies:
  qr_widget:
    git:
      url: git://github.com/vanyasem/qr.widget.git

添加依赖后运行 flutter packages get 或使用IDE更新包。

入门指南

首先,在代码中导入依赖:

import 'package:qr_widget/qr_widget.dart';

接下来,使用以下代码渲染基本的二维码:

QrImageView(
  data: '1234567890',
  version: QrVersions.auto,
  size: 200.0,
),

属性说明

属性 类型 描述
version int QrVersions.auto 或 1-40之间的值
errorCorrectionLevel int 定义在 QrErrorCorrectLevel 中的值
size double 图像的(方形)大小
padding EdgeInsets 围绕二维码数据的填充
backgroundColor Color 背景颜色(默认无)
eyeStyle QrEyeStyle 配置二维码眼睛(角落)的形状和颜色
dataModuleStyle QrDataModuleStyle 配置点的形状和颜色
gapless bool 防止间隙的额外像素(默认为true)
errorStateBuilder QrErrorBuilder 显示错误状态的小部件
constrainErrorBounds bool 控制错误小部件是否受约束
embeddedImage ImageProvider 在二维码中心嵌入的图像
embeddedImageStyle QrEmbeddedImageStyle 嵌入图像的属性
embeddedImageEmitsError bool 如果为true,则任何加载嵌入图像失败都会触发错误状态
semanticsLabel String 用于屏幕阅读器描述二维码内容

示例

基本示例

QrImageView(
  data: 'This is a simple QR code',
  version: QrVersions.auto,
  size: 320,
  gapless: false,
)

带有嵌入图像的示例

QrImageView(
  data: 'This QR code has an embedded image as well',
  version: QrVersions.auto,
  size: 320,
  gapless: false,
  embeddedImage: AssetImage('assets/images/my_embedded_image.png'),
  embeddedImageStyle: QrEmbeddedImageStyle(
    size: Size(80, 80),
  ),
)

错误状态示例

QrImageView(
  data: 'This QR code will show the error state instead',
  version: 1,
  size: 320,
  gapless: false,
  errorStateBuilder: (cxt, err) {
    return Container(
      child: Center(
        child: Text(
          'Uh oh! Something went wrong...',
          textAlign: TextAlign.center,
        ),
      ),
    );
  },
)

完整示例应用

以下是一个完整的示例应用,展示了如何在Flutter中使用 qr_widget

/*
 * QR.Widget
 * Copyright (c) 2019-2023 the QR.Widget authors.
 * See LICENSE for distribution and usage details.
 */

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:qr_widget/qr_widget.dart';

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

/// The example application class
class ExampleApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.white,
        statusBarIconBrightness: Brightness.dark,
        systemNavigationBarColor: Colors.white,
        systemNavigationBarIconBrightness: Brightness.dark,
      ),
    );
    return MaterialApp(
      title: 'QR.Widget',
      theme: ThemeData.light(),
      debugShowCheckedModeBanner: false,
      home: MainScreen(),
    );
  }
}

class MainScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QR Code Example'),
      ),
      body: Center(
        child: QrImageView(
          data: 'Hello, World!',
          version: QrVersions.auto,
          size: 320,
          gapless: false,
          embeddedImage: AssetImage('assets/images/my_embedded_image.png'),
          embeddedImageStyle: QrEmbeddedImageStyle(
            size: Size(80, 80),
          ),
        ),
      ),
    );
  }
}

确保将图像资源添加到您的项目中,并在 pubspec.yaml 中正确声明。

致谢与许可

感谢 Kevin Moore 的 QR - Dart 库,它是这个库的核心。QR.Widget 发布在 BSD-3 许可下。


更多关于Flutter二维码生成与展示插件qr_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter二维码生成与展示插件qr_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个使用 qr_widget 插件在 Flutter 中生成和展示二维码的示例代码。

首先,你需要在你的 pubspec.yaml 文件中添加 qr_flutter 依赖项(注意:虽然你提到了 qr_widget,但 Flutter 社区中广泛使用的是 qr_flutter 插件,这里假设你是指这个插件。如果确实存在一个名为 qr_widget 的插件,请相应调整依赖项名称)。

dependencies:
  flutter:
    sdk: flutter
  qr_flutter: ^4.0.0  # 请检查最新版本号

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

接下来,你可以在你的 Dart 文件中使用 qr_flutter 插件来生成和展示二维码。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('QR Code Generator'),
        ),
        body: Center(
          child: QrImage(
            data: 'https://www.example.com',  // 这里是你要编码为二维码的数据
            version: QrVersions.auto,
            size: 200.0,
            color: Colors.black,
            backgroundColor: Colors.white,
            errorCorrectionLevel: QrErrorCorrectLevel.H,
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () async {
            // 这里可以添加分享二维码的逻辑,比如通过 Share 插件分享
            // Share.share('Check out this QR code: ' + (await generateQrCodeImage()));
          },
          tooltip: 'Share',
          child: Icon(Icons.share),
        ),
      ),
    );
  }

  // 可选的:生成一个File对象以便进一步处理(比如保存到设备)
  Future<File> generateQrCodeImage() async {
    final data = 'https://www.example.com';
    final qr = QrCode(
      data: data,
      version: QrVersions.auto,
      errorCorrectionLevel: QrErrorCorrectLevel.H,
    );

    final image = await qr.toImage(200);
    final byteData = await image.toByteData(format: ImageByteFormat.png);
    final directory = (await getApplicationDocumentsDirectory()).path;
    final path = '$directory/qrcode.png';
    final file = File(path);
    await file.writeAsBytes(byteData!.buffer.asUint8List());

    return file;
  }
}

注意:

  1. QrVersions.auto 会自动选择二维码的版本,你可以根据需要指定一个具体的版本。
  2. QrErrorCorrectLevel.H 表示最高的错误纠正级别,你可以根据需要调整。
  3. generateQrCodeImage 方法是一个可选的示例,展示了如何将生成的二维码保存为一个 PNG 文件。这需要 path_provider 插件来获取应用的文档目录路径。如果你需要这个功能,请在 pubspec.yaml 中添加 path_provider 依赖项。

这个示例代码展示了如何在 Flutter 应用中使用 qr_flutter 插件生成和展示一个简单的二维码。希望这对你有所帮助!

回到顶部