POS系统打印收据图片报错:String类型参数无法赋值给Image类型
问题解决方法
错误原因
generator.image()方法要求传入的参数是Image类型对象,你当前将图片字节转成了base64编码的字符串传入,类型不匹配触发报错。
修正方案
你不需要对图片字节做base64编码,直接将资源读取到的字节流解码为对应Image类型对象传入即可,以下是完整可运行的修正代码:
首先补充必要导入:
import 'dart:ui'; import 'package:flutter/services.dart'; // 保留你原有打印相关的依赖导入
修改后的getImage方法:
Future<List<int>> getImage() async { List<int> bytes = []; CapabilityProfile profile = await CapabilityProfile.load(); final generator = Generator(PaperSize.mm80, profile); final ByteData data = await rootBundle.load('assets/logo.png'); final Uint8List imageRawBytes = data.buffer.asUint8List(); // 解码原始字节为dart:ui的Image对象 final Image image = await decodeImageFromList(imageRawBytes); bytes += generator.image(image); return bytes; }
兼容说明
如果你使用的打印库版本要求传入package:image库的Image对象,按以下方式调整即可:
- 先在
pubspec.yaml中添加image依赖 - 修改导入与解码逻辑:
import 'package:image/image.dart' as img; // 解码部分替换为以下代码 final img.Image? decodedImage = img.decodePng(imageRawBytes); if (decodedImage != null) { bytes += generator.image(decodedImage); }
内容的提问来源于stack exchange,提问作者Jian Yuan Ng
相关产品推荐
相关产品推荐

