Flutter安全二维码生成插件secure_qr_generator的使用
Flutter安全二维码生成插件secure_qr_generator的使用
secure_qr_generator
是一个用于生成安全、自动刷新的二维码的 Flutter 插件。它支持AES加密、HMAC-SHA256签名、自动过期管理和自定义样式。
特性
- 安全性:支持AES加密和HMAC-SHA256签名。
- 自动过期:内置有效期管理。
- 自动刷新:二维码在过期前自动刷新。
- Flutter集成:现成的 Flutter 小部件。
- 可定制样式:完全控制二维码外观。
- 性能优化:高效再生,最小化开销。
安装
将以下内容添加到你的 pubspec.yaml
文件中:
dependencies:
secure_qr_generator: ^1.0.4
然后运行:
flutter pub get
快速开始
基本用法
import 'package:secure_qr_generator/secure_qr_generator.dart';
// 创建配置
final config = GeneratorConfig.production(
secretKey: 'your-32-character-secret-key-here!!!',
validityDuration: Duration(minutes: 5),
);
// 初始化生成器
final generator = SecureQRGenerator(config);
// 创建二维码数据
final data = QRData(
payload: {'userId': '123', 'access': 'granted'},
metadata: {'purpose': 'access_control'},
tags: ['entrance', 'visitor'],
);
// 生成二维码
final result = await generator.generateQR(data);
使用自动刷新的小部件
AutoRegeneratingQRView(
data: data,
generator: generator,
size: 200,
style: QrStyle(
eyeStyle: QrEyeStyle(eyeShape: QrEyeShape.square),
dataModuleStyle: QrDataModuleStyle(
dataModuleShape: QrDataModuleShape.circle,
),
),
onRegenerate: (result) {
print('新二维码已生成: ${result.id}');
},
onError: (error) {
print('错误: $error');
},
)
配置选项
开发环境配置
final devConfig = GeneratorConfig.development();
生产环境配置
final prodConfig = GeneratorConfig.production(
secretKey: 'your-secure-production-key-here!!!!!!',
validityDuration: Duration(minutes: 5),
);
自定义配置
final customConfig = GeneratorConfig(
secretKey: 'your-secret-key',
validityDuration: Duration(minutes: 10),
enableEncryption: true,
enableSignature: true,
dataVersion: 1,
idPrefix: 'CUSTOM_',
);
高级功能
自定义二维码样式
QrStyle(
eyeStyle: QrEyeStyle(
eyeShape: QrEyeShape.square,
color: Colors.blue,
),
dataModuleStyle: QrDataModuleStyle(
dataModuleShape: QrDataModuleShape.circle,
color: Colors.black,
),
embeddedImage: AssetImage('assets/logo.png'),
embeddedImageStyle: QrEmbeddedImageStyle(
size: Size(40, 40),
),
)
自定义刷新间隔
AutoRegeneratingQRView(
data: data,
generator: generator,
regenerationInterval: Duration(minutes: 2),
// 其他参数
)
自定义二维码构建器
AutoRegeneratingQRView(
data: data,
generator: generator,
builder: (qrData) => Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
),
child: QrImageView(
data: qrData,
size: 200,
),
),
)
错误处理
该插件包括全面的错误处理:
try {
final result = await generator.generateQR(data);
// 使用结果
} on GenerationError catch (e) {
switch (e.type) {
case GenerationErrorType.configuration:
print('配置错误: ${e.message}');
break;
case GenerationErrorType.encryption:
print('加密错误: ${e.message}');
break;
case GenerationErrorType.payloadTooLarge:
print('载荷过大: ${e.message}');
break;
// 处理其他错误类型...
}
}
安全注意事项
- 保持你的
secretKey
安全,不要将其提交到版本控制系统。 - 在开发和生产环境中使用不同的密钥。
- 在添加数据时考虑二维码的大小限制。
- 根据使用场景选择合适的有效期。
- 在生产环境中定期更换加密密钥。
示例代码
以下是一个完整的示例代码,展示了如何使用 secure_qr_generator
插件:
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:secure_qr_generator/secure_qr_generator.dart';
void main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Secure QR Genrator Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const QRDisplayScreen(),
);
}
}
class QRDisplayScreen extends StatefulWidget {
const QRDisplayScreen({super.key});
[@override](/user/override)
State<QRDisplayScreen> createState() => _QRDisplayScreenState();
}
class _QRDisplayScreenState extends State<QRDisplayScreen> {
late TextEditingController phoneController;
late TextEditingController secretKeyController;
bool enableEncryption = true;
bool enableSignature = true;
int validityDuration = 60;
String phoneNumber = '07070707';
// 配置
late GeneratorConfig secureConfig;
late SecureQRGenerator generator;
// 更新生成器
void updateGenerator() {
setState(() {
secureConfig = GeneratorConfig(
secretKey: secretKeyController.text,
enableEncryption: enableEncryption,
enableSignature: enableSignature,
validityDuration: Duration(seconds: validityDuration),
);
generator = SecureQRGenerator(secureConfig);
});
}
[@override](/user/override)
void initState() {
phoneController = TextEditingController(text: phoneNumber);
secretKeyController =
TextEditingController(text: '2024#@#qrcod#orange@##perform#==');
// 初始化配置
secureConfig = GeneratorConfig(
secretKey: secretKeyController.text,
enableEncryption: enableEncryption,
enableSignature: enableSignature,
validityDuration: Duration(seconds: validityDuration),
);
generator = SecureQRGenerator(secureConfig);
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Secure QR Generator Demo')),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
controller: secretKeyController,
decoration: const InputDecoration(
labelText: 'AES-256 密钥(可选)'),
onChanged: (_) => updateGenerator(),
),
SwitchListTile(
title: const Text('加密(可选)'),
value: enableEncryption,
onChanged: (value) {
setState(() {
enableEncryption = value;
updateGenerator();
});
},
),
SwitchListTile(
title: const Text('签名(可选)'),
value: enableSignature,
onChanged: (value) {
setState(() {
enableSignature = value;
updateGenerator();
});
},
),
Text('有效期 ($validityDuration 秒)'),
Slider(
value: validityDuration.toDouble(),
min: 10,
max: 300,
divisions: 29,
label: '$validityDuration 秒',
onChanged: (value) {
setState(() {
validityDuration = value.toInt();
updateGenerator();
});
},
),
TextField(
decoration:
const InputDecoration(labelText: '电话号码'),
controller: phoneController,
onChanged: (value) {
setState(() {
phoneNumber = value;
});
},
),
const SizedBox(height: 40),
// 二维码
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AutoRegeneratingQRView(
data: QRData(
payload: {
'phoneNumber': phoneNumber,
},
),
generator: generator,
size: 250,
style: const QrStyle(
eyeStyle: QrEyeStyle(
eyeShape: QrEyeShape.square,
color: Colors.deepOrangeAccent,
),
),
onRegenerate: (result) =>
log('新二维码已生成: ${result.toMap()}'),
onError: (error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('错误: $error')),
);
},
),
],
),
],
),
),
);
}
[@override](/user/override)
void dispose() {
secretKeyController.dispose();
super.dispose();
}
}
更多关于Flutter安全二维码生成插件secure_qr_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全二维码生成插件secure_qr_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用secure_qr_generator
插件来生成安全二维码的示例代码。这个插件允许你生成包含敏感信息的二维码,并且提供了加密功能以增强安全性。
首先,你需要在你的pubspec.yaml
文件中添加secure_qr_generator
依赖:
dependencies:
flutter:
sdk: flutter
secure_qr_generator: ^最新版本号 # 请替换为实际可用的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤生成一个安全的二维码:
- 导入必要的包:
import 'package:flutter/material.dart';
import 'package:secure_qr_generator/secure_qr_generator.dart';
- 创建生成二维码的函数:
Future<Uint8List?> generateSecureQRCode(String data) async {
try {
// 配置加密选项(可选)
final encryptionOptions = EncryptionOptions(
algorithm: EncryptionAlgorithm.aes256, // 加密算法
password: "your-secure-password", // 加密密码
salt: "your-unique-salt", // 盐值,用于增强密码强度
);
// 生成二维码
final qrCodeGenerator = SecureQrCodeGenerator();
final qrCode = await qrCodeGenerator.generateQRCode(
data: data,
encryptionOptions: encryptionOptions, // 如果不需要加密,可以省略此行
);
return qrCode;
} catch (e) {
print("Error generating QR code: $e");
return null;
}
}
- 在UI中显示二维码:
class QRCodeGeneratorScreen extends StatefulWidget {
@override
_QRCodeGeneratorScreenState createState() => _QRCodeGeneratorScreenState();
}
class _QRCodeGeneratorScreenState extends State<QRCodeGeneratorScreen> {
Uint8List? qrCodeImage;
@override
void initState() {
super.initState();
// 初始化时生成二维码
_generateQRCode("Your secure data here");
}
Future<void> _generateQRCode(String data) async {
final qrCode = await generateSecureQRCode(data);
if (mounted) {
setState(() {
qrCodeImage = qrCode;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Secure QR Code Generator'),
),
body: Center(
child: qrCodeImage == null
? CircularProgressIndicator()
: Image.memory(
qrCodeImage!,
width: 300,
height: 300,
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 重新生成二维码(如果需要)
_generateQRCode("Updated secure data here");
},
tooltip: 'Generate QR Code',
child: Icon(Icons.add),
),
);
}
}
- 运行你的应用:
确保你的主屏幕或导航器指向QRCodeGeneratorScreen
,然后运行你的Flutter应用。你应该能看到一个显示生成的二维码的界面,如果配置了加密选项,二维码内容将被加密。
这是一个基本的示例,实际应用中你可能需要根据具体需求进行更多的配置和优化。希望这个示例能帮助你开始使用secure_qr_generator
插件来生成安全的二维码。