使用pdf/widgets.dart插入PDF图片报错:MemoryImage未定义
解决pdf库插入图片时MemoryImage未定义的问题
问题分析
你遇到的The function 'MemoryImage' isn't defined错误,是因为混淆了库的模块归属:MemoryImage属于package:pdf/pdf.dart的核心模块,而非package:pdf/widgets.dart(你用pw别名的模块),直接写pw.MemoryImage会导致找不到定义。
修正后的代码
import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/services.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; class PdfParagraphApi { static Future<void> generate() async { final pdf = pw.Document(); // 加载assets中的图片并转为Uint8List final ByteData imageData = await rootBundle.load('assets/img.png'); final Uint8List imageBytes = imageData.buffer.asUint8List(); // 向PDF添加包含图片的页面 pdf.addPage( pw.MultiPage( build: (context) => <pw.Widget>[ // 使用pdf库的MemoryImage创建图片提供者,传入pw.Image pw.Image(pdf.MemoryImage(imageBytes)), ], ), ); // 可选:将生成的PDF保存到本地文件 final outputFile = File('generated_pdf.pdf'); await outputFile.writeAsBytes(await pdf.save()); } }
关键修正点
- 导入
dart:typed_data以确保Uint8List和ByteData能正常使用 - 用
pdf.MemoryImage替代错误的pw.MemoryImage,因为这个类属于pdf核心库 - 先将assets资源转为
Uint8List,再传入pdf.MemoryImage作为图片数据源
内容的提问来源于stack exchange,提问作者user7206608
相关产品推荐
相关产品推荐

