Flutter Windows发行版出现PathNotFoundException问题求助
解决Flutter Windows发行版中PDF自定义字体加载失败的问题
问题原因
调试模式下Flutter会保留assets的原始文件结构,直接通过文件路径读取可行;但Windows发行版构建时,assets会被编译打包到应用的资源包中,不再是独立的磁盘文件,因此用File类读取会触发路径不存在的错误。
解决方案
1. 使用rootBundle加载字体字节数据
替换直接读取文件路径的方式,通过Flutter的资源加载机制获取字体数据:
import 'package:flutter/services.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; // 加载自定义字体的方法 Future<pw.Font> loadOpenSansBold() async { // 通过rootBundle加载assets中的字体文件 final ByteData fontByteData = await rootBundle.load('assets/OpenSans-Bold.ttf'); // 转换为pdf库需要的Uint8List格式 final Uint8List fontBytes = fontByteData.buffer.asUint8List(); return pw.Font.ttf(fontBytes); }
2. 确认pubspec.yaml的assets配置正确
确保字体文件已被正确声明在assets列表中,避免打包时遗漏:
flutter: assets: # 明确指定字体文件路径,或者用`- assets/`包含整个目录 - assets/OpenSans-Bold.ttf
3. 清理缓存并重新构建发行版
有时候旧缓存会导致assets未正确打包,执行以下命令重新构建:
flutter clean flutter build windows
额外注意事项
- 确保字体文件的路径和代码中的引用完全匹配(包括大小写,虽然Windows不区分,但打包流程可能对大小写敏感)
- 不要使用绝对路径或相对磁盘路径加载assets,必须通过
rootBundle或AssetBundle相关API
内容的提问来源于stack exchange,提问作者richard.online
相关产品推荐
相关产品推荐

