Flutter Package项目无法加载assets目录下的本地json文件
Flutter Package 加载assets目录JSON文件报错排查方案
svg资源可正常加载、仅JSON加载失败,按以下步骤逐一排查即可解决:
核对pubspec.yaml资源声明
能正常加载svg说明资源目录基础配置大概率没问题,但需确认JSON文件所在路径被显式纳入assets扫描范围:flutter: assets: # 存svg的目录配置正常可保留 - assets/svg/ # 两种JSON配置方式二选一:要么单独声明JSON文件路径 - assets/config.json # 要么直接声明整个assets目录全量扫描,避免漏配 # - assets/配置修改后必须执行
flutter pub get,完全冷重启应用,热重载/热重启不会更新assets打包清单。加载时显式传入package参数
这是该场景最高发的问题:Flutter加载Package内资源时,非图片类资源不会自动识别Package归属,必须手动指定package名,否则默认会去当前运行的主工程assets目录下查找,直接触发资源找不到的错误。
错误写法(缺package参数):// 错误:默认查找主工程assets路径,Package内资源无法命中 final String jsonContent = await rootBundle.loadString('assets/config.json');正确写法:
// 替换为你自己pubspec.yaml中声明的Package名称 final String jsonContent = await rootBundle.loadString( 'assets/config.json', package: 'your_own_package_name', ); final Map<String, dynamic> config = jsonDecode(jsonContent);哪怕是在Package自身的example工程、或是Package内部代码中加载自有JSON资源,也建议显式传入package参数,不同Flutter版本对Package内自引用资源的默认路径解析逻辑存在差异,显式传参可以规避版本兼容问题。
清理构建缓存/规避版本bug
如果以上配置都正确仍报错,先执行全量清缓存操作:- 运行
flutter clean清除Flutter构建缓存 - 按需删除原生构建缓存目录(iOS端删
ios/Pods,Android端删android/.gradle) - 重新执行
flutter pub get后冷启动运行
若你使用的是Flutter 3.0~3.3早期小版本,该区间确实存在非图片类文本资源打包遗漏的构建问题,可直接升级Flutter到3.3.4及以上稳定版解决;如果暂时无法升级Flutter版本,可临时将JSON文件放到
lib/src目录下,通过import方式直接引入绕开asset打包逻辑:import 'package:your_own_package_name/src/config.json' as rawConfig; // 直接解析引入的内容即可 final Map<String, dynamic> config = jsonDecode(rawConfig.config);- 运行
内容的提问来源于stack exchange,提问作者hemandroid
相关产品推荐
相关产品推荐

