Flutter使用qr_flutter生成批量QR Code后如何打包保存为zip文件
解决方案
1. 添加依赖
在pubspec.yaml中添加zip处理依赖,你已有的依赖不用修改,新增如下项:
dependencies: archive: ^3.6.1 # 核心压缩库 # 如需直接分享zip包,可新增以下依赖 share_plus: ^7.2.2
执行flutter pub get安装依赖。
2. 新增zip打包工具方法
import 'package:archive/archive_io.dart'; import 'package:path_provider/path_provider.dart'; // 传入二维码文件路径列表和自定义的压缩包名,返回压缩包本地路径 Future<String> packQrToZip(List<String> qrFilePaths, String zipName) async { // 初始化压缩包对象 final archive = Archive(); // 遍历所有二维码文件,添加到压缩包 for (final path in qrFilePaths) { final file = File(path); if (await file.exists()) { final bytes = await file.readAsBytes(); // 取原文件名作为压缩包内的文件名 final fileName = path.split('/').last; archive.addFile(ArchiveFile(fileName, bytes.length, bytes)); } } // 编码为zip格式 final zipBytes = ZipEncoder().encode(archive); // 生成压缩包存储路径,这里存在应用文档目录,可自行修改 final docDir = await getApplicationDocumentsDirectory(); final zipPath = '${docDir.path}/$zipName.zip'; // 写入压缩包到本地 await File(zipPath).writeAsBytes(zipBytes!); return zipPath; }
3. 修改按钮触发逻辑
你原本的逻辑只需要新增路径收集、打包的步骤即可,无需修改原有createQrPic实现:
CupertinoButton.filled( child: const Text('Get QR Code'), onPressed: () async { List<String> qrPaths = []; // 1. 批量生成二维码,收集所有文件路径 for (int i = 1; i <= 3; i++) { String path = await createQrPic('ID1B$i'); qrPaths.add(path); print('QR $i 生成完成'); } // 2. 打包为zip String zipPath = await packQrToZip(qrPaths, '批量二维码'); print('压缩包生成完成:$zipPath'); // 3. 后续操作二选一即可 // 选项1:保存压缩包到相册/本地 await GallerySaver.saveImage(zipPath); // 选项2:直接分享压缩包 // await Share.shareXFiles([XFile(zipPath)], text: '批量二维码压缩包'); }, )
4. 权限适配(可选)
如果需要将压缩包保存到系统相册/公共目录,需要提前配置权限:
- iOS:在
Info.plist中新增相册写入权限描述:<key>NSPhotoLibraryAddUsageDescription</key> <string>需要访问相册保存二维码压缩包</string> - Android:在
android/app/src/main/AndroidManifest.xml中新增存储权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 安卓13及以上额外配置 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
内容的提问来源于stack exchange,提问作者Zaie Hilmi
相关产品推荐
相关产品推荐

