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

Flutter Web部署到Firebase Hosting后Firestore Bundle加载失败求助

问题原因
  • 类型兼容问题:Flutter Web release构建模式下,FirebaseStorage的getData()返回的二进制数据类型不是Firebase JS SDK 8.10.0的loadBundle方法可识别的标准Uint8List格式,隐式类型转换出错导致参数异常。
  • 流监听逻辑缺陷:LoadBundleTask的stream.last调用在Web端JS SDK 8.10.0中存在实现bug,release模式下无法正确捕获流结束事件,提前抛出参数错误。
  • 资源编码异常:存储在Firebase Storage中的bundle文件若Content-Type被默认设置为text/plain,托管平台CDN传输时会自动做文本编码转换,破坏bundle的二进制结构,本地调试时无CDN转换逻辑因此正常。
解决方案

1. 强制转换二进制数据格式

拉取到bundle数据后先手动转换为标准Uint8List再传入loadBundle,代码修改如下:

var rawData = await FirebaseStorage.instance.ref('exports/companyBundle.txt').getData();
// 新增强制类型转换逻辑,适配Web release环境
var buffer = Uint8List.fromList(rawData!);
LoadBundleTask task = FirebaseFirestore.instance.loadBundle(buffer);

2. 替换流等待逻辑

不要使用stream.last等待加载完成,改用LoadBundleTask自带的future属性:

// 替换掉 await task.stream.last;
await task.future;

3. 修正Storage中bundle文件的Content-Type

在Firebase Storage控制台找到exports/companyBundle.txt文件,修改其元数据,将Content-Type设置为application/firestore-bundle,避免传输时被当做文本处理损坏内容。

4. 可选:升级SDK版本

如果上述修改仍未解决问题,将index.html中引入的Firebase JS SDK版本升级到8.x的最新稳定版(≥8.20.0),该版本已修复loadBundle的多个Web端兼容问题。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:15:08