You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter保存生成的QR Code至相册出现黑屏问题求助

解决QR Code保存相册黑屏问题

你遇到的黑屏问题核心原因是QrPainter默认未明确设置背景色,生成的图片背景为透明状态,相册会将透明区域渲染为黑色;同时直接调用toImageData可能存在渲染不完整的情况,导致二维码内容无法正常显示。

修复方案:

  • 给QrPainter指定明确的color(二维码前景色)和emptyColor(背景色),避免透明背景
  • 改用toImage方法生成图片后再转成ByteData,提升渲染可靠性

修改后的完整代码:

Future<void> _saveQRCodeToGallery() async {
  try {
    final qrPainter = QrPainter(
      data: widget.qrCodeData,
      version: QrVersions.auto,
      color: Colors.black, // 二维码主体颜色
      emptyColor: Colors.white, // 背景色,替换透明
    );

    // 生成指定尺寸的图片
    final image = await qrPainter.toImage(400);
    final byteData = await image.toByteData(format: ImageByteFormat.png);
    
    if (byteData != null) {
      final result = await ImageGallerySaver.saveImage(
        byteData.buffer.asUint8List(),
        quality: 80,
        name: "qr_code_image",
      );

      if (result['isSuccess']) {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text("图片已保存到相册")),
        );
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text("保存图片到相册失败")),
        );
      }
    }
  } catch (e) {
    print("保存图片出错: $e");
  }
}

额外检查项:

  • 确认pubspec.yaml中已添加qr_flutter和image_gallery_saver依赖,并执行过flutter pub get
  • 权限配置:Android需在AndroidManifest.xml中声明WRITE_EXTERNAL_STORAGE(Android 13+可省略);iOS需在Info.plist中添加NSPhotoLibraryAddUsageDescription权限说明

内容的提问来源于stack exchange,提问作者Hafsa Azram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:52:51