Flutter二维码生成与展示插件qr_widget的使用
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
更多关于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;
}
}
注意:
QrVersions.auto
会自动选择二维码的版本,你可以根据需要指定一个具体的版本。QrErrorCorrectLevel.H
表示最高的错误纠正级别,你可以根据需要调整。generateQrCodeImage
方法是一个可选的示例,展示了如何将生成的二维码保存为一个 PNG 文件。这需要path_provider
插件来获取应用的文档目录路径。如果你需要这个功能,请在pubspec.yaml
中添加path_provider
依赖项。
这个示例代码展示了如何在 Flutter 应用中使用 qr_flutter
插件生成和展示一个简单的二维码。希望这对你有所帮助!