Flutter二维码生成与扫描插件qr_flutter_new的使用
Flutter二维码生成与扫描插件qr_flutter_new的使用
标题
Flutter二维码生成与扫描插件qr_flutter_new的使用
内容
QR.Flutter 是一个用于在 Flutter 中简单快速渲染二维码的库,通过 Widget 或自定义画笔实现。
需要帮助?
请不要提交关于“如何…?”或“什么是…?”类型的问题。这些问题几乎会被立即关闭。如果您有疑问,请在讨论板或 Stack Overflow 上提问。那里会有人回答您的问题。使用问题会造成大量噪音,并导致真正的问题解决得更慢。
特性
- 无null安全性
- 自动检测 QR 码版本/类型或手动输入
- 支持 QR 码版本 1 - 40
- 错误校正 / 冗余
- 可配置输出大小、边距、背景和前景颜色
- 支持图像叠加
- 导出为图像数据以保存到文件或内存中
- 不需要互联网连接
安装
兼容性版本: 4.0.0+ 支持 null 安全性,并且需要与 Flutter 兼容的版本。 如果使用的 Flutter 版本不兼容,请使用此库的 3.x 版本。
您应该将以下内容添加到您的 pubspec.yaml
文件中:
dependencies:
qr_flutter: ^4.1.0
接下来,要渲染基本的二维码可以使用以下代码(或类似代码):
QrImageView(
data: '1234567890',
version: QrVersions.auto,
size: 200.0,
),
根据您的数据需求,您可以调整二维码输出。可用的选项如下:
属性 | 类型 | 描述 |
---|---|---|
version |
int | QrVersions.auto 或者 1 到 40 之间的值。有关限制和详细信息,请参阅 http://www.qrcode.com/en/about/version.html。 |
errorCorrectionLevel |
int | 定义在 QrErrorCorrectLevel 上的一个值。例如:QrErrorCorrectLevel.L 。 |
size |
double | 图像的 (方形) 大小。如果没有指定,则将自动大小化以满足最短尺寸约束。 |
padding |
EdgeInsets | 周围二维码数据的填充。 |
backgroundColor |
Color | 背景颜色(默认为无)。 |
eyeStyle |
QrEyeStyle | 配置二维码眼睛(角落)的形状和颜色。 |
dataModuleStyle |
QrDataModuleStyle | 配置点的形状和颜色。 |
gapless |
bool | 添加额外像素以防止间隙(默认为 true)。 |
errorStateBuilder |
QrErrorBuilder | 允许显示错误状态 Widget 在渲染二维码时发生错误(例如:版本太低,输入太长等)。 |
constrainErrorBounds |
bool | 如果为真,错误 Widget 将被限制在二维码应绘制的正方形内。如果为假,错误状态 Widget 将根据需要生长/缩小。 |
embeddedImage |
ImageProvider | 定义嵌入图像的 ImageProvider 。 |
embeddedImageStyle |
QrEmbeddedImageStyle | 嵌入图像的样式属性。 |
embeddedImageEmitsError |
bool | 如果为真,加载嵌入图像失败时将触发 errorStateBuilder 或显示空 Container 。如果为假,二维码将被渲染并且嵌入图像将被忽略。 |
semanticsLabel |
String | semanticsLabel 将由屏幕阅读器用来描述二维码的内容。 |
borderRadius |
double | 设置形状类型 <code>QrEyeShape.square</code> 、QrDataModuleShape.square 、EmbeddedImageShape.square 的的角半径。设置在适当的样式中。 |
roundedOutsideCorners |
bool | 如果为真,数据的外角将被圆角。默认为 QrDataModuleStyle 。外角圆角至 borderRadius 。仅适用于 QrDataModuleShape.square 。 |
outsideBorderRadius |
double | 如果外圆角 outsideBorderRadius 应该不同于内圆角 borderRadius 。最多为 borderRadius 。仅适用于 QrDataModuleShape.square 。 |
gradient |
Gradient | 将固体颜色更改为渐变,例如 LinearGradient 。 |
safeArea |
bool | 如果为真,数据隐藏在 embeddedImage 后面。设置为 QrEmbeddedImageStyle 。 |
safeAreaMultiplier |
double | safeArea 大小的乘数。 |
示例
有一个简单的、工作的 Flutter 应用程序位于 /example
目录中。您可以使用它来玩转所有选项。
此外,以下示例为您提供了一个快速概览,说明如何使用该库。
一个基本的二维码看起来像这样:
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: (context, error) {
return Container(
child: Center(
child: Text(
'Uh oh! Something went wrong...',
textAlign: TextAlign.center,
),
),
);
},
)
一个具有内部和外部角落圆角以及嵌入图像安全区域的二维码:
QrImageView(
data: 'London is the capital of Great Britain',
version: QrVersions.auto,
size: 320,
eyeStyle: const QrEyeStyle(
borderRadius: 10,
),
dataModuleStyle: const QrDataModuleStyle(
borderRadius: 5,
roundedOutsideCorners: true,
),
embeddedImage: AssetImage('assets/images/my_embedded_image.png'),
embeddedImageStyle: QrEmbeddedImageStyle(
size: Size.square(40),
color: Colors.white,
safeArea: true,
safeAreaMultiplier: 1.1,
embeddedImageShape: EmbeddedImageShape.square,
borderRadius: 10,
),
)
一个具有渐变的二维码:
QrImageView(
data: 'Rainbow after the rain',
version: QrVersions.auto,
size: 320,
gradient: LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.topRight,
colors: [
Color(0xffff0000),
Color(0xffffa00),
Color(0xffffff00),
Color(0xff008000),
Color(0xff0000ff),
Color(0xff4b0082),
Color(0xffee82ee),
],
),
)
结束语
感谢 wanogho confidence 提供的 awesome [QR - Dart] 库。它是这个库的核心。
有关作者/贡献者信息,请参阅 AUTHORS
文件。
许可证
QR.Flutter 发布在 BSD-3 许可证下。详情请参阅 LICENSE
文件。
示例代码
/*
* QR.Flutter
* Copyright (c) 2019 the QR.Flutter authors.
* See LICENSE for distribution and usage details.
*/
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'main_screen.dart';
void main() => runApp(ExampleApp());
/// The example application class
class ExampleApp extends StatelessWidget {
// This widget is the root of your application.
[@override](/user/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.Flutter',
theme: ThemeData.light(),
debugShowCheckedModeBanner: false,
home: MainScreen(),
);
}
}
更多关于Flutter二维码生成与扫描插件qr_flutter_new的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter二维码生成与扫描插件qr_flutter_new的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用qr_flutter_new
插件来生成和扫描二维码的示例代码。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加qr_flutter_new
依赖:
dependencies:
flutter:
sdk: flutter
qr_flutter_new: ^4.0.0 # 请检查最新版本号
然后运行flutter pub get
来获取依赖。
2. 生成二维码
下面是一个简单的示例,展示如何使用qr_flutter_new
来生成一个二维码:
import 'package:flutter/material.dart';
import 'package:qr_flutter_new/qr_flutter_new.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: QRCodeGenerator(),
);
}
}
class QRCodeGenerator extends StatelessWidget {
final String qrCodeData = "https://flutter.dev";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('QR Code Generator'),
),
body: Center(
child: QrImage(
data: qrCodeData,
version: QrVersions.auto,
size: 200.0,
color: Colors.black,
embeddedImage: AssetImage('assets/logo.png'), // 可选,嵌入小图标
embeddedImageStyle: QrEmbeddedImageStyle(
size: Size.square(40.0),
),
),
),
);
}
}
在这个例子中,QrImage
组件用于生成二维码,data
属性指定了二维码包含的数据。你还可以调整version
、size
和color
等属性来定制二维码的外观。
3. 扫描二维码
为了扫描二维码,你需要使用qr_code_scanner
插件(注意这不是qr_flutter_new
的功能,但通常这两个功能会一起使用)。首先,添加依赖:
dependencies:
qr_code_scanner: ^0.6.1 # 请检查最新版本号
然后,你可以创建一个扫描二维码的页面:
import 'package:flutter/material.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
class QRCodeScannerPage extends StatefulWidget {
@override
_QRCodeScannerPageState createState() => _QRCodeScannerPageState();
}
class _QRCodeScannerPageState extends State<QRCodeScannerPage> {
final BarcodeScannerController _controller = BarcodeScannerController();
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
String? result = '';
@override
void reassemble() {
super.reassemble();
if (Platform.isAndroid) {
_controller?.pauseCamera();
}
}
@override
void dispose() {
_controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('QR Code Scanner'),
),
body: Column(
children: <Widget>[
Expanded(
flex: 5,
child: QRView(
key: qrKey,
controller: _controller,
),
),
Expanded(
flex: 1,
child: Center(
child: Text(
'$result',
style: TextStyle(fontSize: 20),
),
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
String? result = await _controller.scan();
setState(() {
this.result = result;
});
},
tooltip: 'Scan',
child: Icon(Icons.scan_wifi),
),
);
}
}
在这个例子中,QRView
组件用于显示相机预览,并通过_controller
来控制扫描过程。当用户点击浮动按钮时,将触发扫描操作,并将结果显示在屏幕上。
4. 整合生成与扫描功能
最后,你可以在一个应用中整合生成和扫描二维码的功能。例如,通过导航器在应用的不同页面之间切换:
import 'package:flutter/material.dart';
import 'package:qr_flutter_new/qr_flutter_new.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('QR Code App'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => QRCodeGenerator()),
);
},
child: Text('Generate QR Code'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => QRCodeScannerPage()),
);
},
child: Text('Scan QR Code'),
),
],
),
),
);
}
}
在这个整合的例子中,HomePage
包含两个按钮,分别用于导航到生成二维码和扫描二维码的页面。
希望这些代码示例能帮助你在Flutter应用中实现二维码的生成和扫描功能!