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
相关产品推荐
相关产品推荐

