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

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
    如果以上配置都正确仍报错,先执行全量清缓存操作:

    1. 运行flutter clean清除Flutter构建缓存
    2. 按需删除原生构建缓存目录(iOS端删ios/Pods,Android端删android/.gradle)
    3. 重新执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:36:21