Flutter package使用rootBundle加载assets配置文件提示无法加载资产如何解决
问题根因
Flutter 的 rootBundle 默认从主工程的根目录检索资源,公共依赖包内声明的资源在打包后会统一映射到 packages/[你的公共包名]/ 路径下,直接写依赖包内的相对资源路径无法匹配到打包后的实际路径,因此抛出加载失败错误。
解决步骤
1. 修改公共包内的资源加载代码
不需要修改现有资源配置,仅调整加载逻辑即可,有两种可选实现方式:
- 方式1(无需传上下文,更推荐工具类使用):在资源路径前拼接公共包名前缀,前缀要和
environment_pkg的pubspec.yaml中name字段完全一致:
static Future<void> initialize(String name) async { final configString = await rootBundle.loadString('packages/environment_pkg/assets/configs/${name}.json'); _config = json.decode(configString) as Map<String, dynamic>; }
- 方式2(上下文场景使用):通过
DefaultAssetBundle指定package参数加载:
static Future<void> initialize(String name, BuildContext context) async { final configString = await DefaultAssetBundle.of(context).loadString( 'assets/configs/${name}.json', package: 'environment_pkg', ); _config = json.decode(configString) as Map<String, dynamic>; }
2. 清理缓存重新构建
执行以下命令清除旧构建缓存,避免缓存导致的加载异常:
flutter clean flutter pub get
重新运行项目即可正常加载资源。
额外注意事项
- 主工程无需重复声明
environment_pkg内的资源配置,否则可能引发路径冲突 - 路径前缀中的公共包名必须和
environment_pkg的pubspec.yaml中声明的name字段完全一致,拼写错误会继续触发加载失败
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

