Flutter延迟组件资源读取失败:如何用rootBundle.load()正确访问?
问题原因
本地测试时,延迟组件的资源大概率被默认打包进了主应用包,所以rootBundle能正常读取;但通过Play Store分发时,延迟组件是独立的动态模块,主包的rootBundle无法访问延迟组件中的资源,这就是报错的核心原因。
解决方法
要访问延迟组件内的资源,必须先确保组件已完成下载加载,再通过该组件对应的AssetBundle来读取,不能直接用rootBundle。
1. 先加载目标延迟组件
首先要确保你配置的arBlock11组件已经下载并加载完成,Flutter会为每个延迟组件自动生成对应的加载类:
// 加载arBlock11对应的动态库 await arBlock11.loadLibrary();
2. 通过延迟组件的AssetBundle读取资源
加载完成后,使用该组件专属的AssetBundle来读取资源:
// 获取arBlock11对应的AssetBundle final deferredBundle = await DeferredComponent.libraryBundle(arBlock11.library); // 读取目标资源文件 ByteData assetFile = await deferredBundle.load('assets/unity/ch1/1/big.file.ecm');
关键注意点
- 不要在主
pubspec.yaml的assets节点重复声明延迟组件内的资源,否则这些资源会被打包进主包,失去延迟加载的意义。 - 必须使用App Bundle(
.aab)格式上传到Play Store,APK不支持动态交付延迟组件的功能。
内容的提问来源于stack exchange,提问作者Josh Knowles
相关产品推荐
相关产品推荐

