首页 > 解决方案 > 如何在颤动中保存生成的批量二维码

问题描述

我正在使用qr_flutter库,我想知道如何将批量生成的 QR 码保存到 zip 文件中。我找到了一个关于如何保存生成的二维码的教程,但它不是批量的。

此按钮将使用 for 循环生成大量 qr 代码,然后将其保存到图库,问题是如何将所有 qr 转储到 zip 文件中或任何收集它们的方法,以便更容易共享

CupertinoButton.filled(
   child: Text('Get QR Code'),
   onPressed: () async {
        for (int i = 1; i <= 3; i++) {
            String path = await createQrPic('ID1B$i');
            final success = await GallerySaver.saveImage(path);

            print('QR $i is $success');
        }
   },
)

这是代码createQRPic()

import 'dart:io';
import 'dart:typed_data';
import 'dart:ui' as ui;

import 'package:flutter/cupertino.dart';
import 'package:flutter/painting.dart';
import 'package:path_provider/path_provider.dart';
import 'package:qr_flutter/qr_flutter.dart';

Future<String> createQrPic(String qrData) async {
  final qrValidationResult = QrValidator.validate(
    data: qrData,
    version: QrVersions.auto,
    errorCorrectionLevel: QrErrorCorrectLevel.L,
  );

  (qrValidationResult.status == QrValidationStatus.valid) ? print('QR is valid') : print(qrValidationResult.error);

  final qrCode = qrValidationResult.qrCode;

  final painter = QrPainter.withQr(
    qr: qrCode!,
    color: const Color(0xFF000080),
    gapless: true,
    embeddedImageStyle: null,
    embeddedImage: null,
  );

  Directory tempDir = await getTemporaryDirectory();
  String tempPath = tempDir.path;
  String fileName= 'jm-$qrData';
  String path = '$tempPath/$fileName.png';

  final picData = await painter.toImageData(
    480,
    format: ui.ImageByteFormat.png,
  );
  await writeToFile(picData!, path);

  return path;
}

Future<void> writeToFile(ByteData data, String path) async {
  final buffer = data.buffer;
  await File(path).writeAsBytes(buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}

标签: flutterdartqr-code

解决方案


推荐阅读