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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:52:11