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

如何在读取Firestore数据时将弱网络视为无网络?

Firestore弱网络下读取性能优化方案

我发现网络信号较弱时,Firestore读取数据的耗时会显著变长,网络稳定时则一切正常。我的应用用户活跃度高,无论设备在线(从服务器读取)还是离线(从缓存读取),每一次读取操作都必须保证速度。

当前使用的代码在弱网环境下接收数据大约需要5秒:

final snapshot = await docData.get();

我的需求是把弱网络状态视为离线,不让Firestore尝试从服务器读取数据。

在VS Code调试控制台中,我看到Firestore输出了如下警告日志,原本想通过捕获这个日志来判断网络状态:

W/Firestore(xxxxx): 这通常表明你的设备当前没有健康的网络连接。客户端将以离线模式运行,直到成功连接到后端。

原本计划基于这个判断实现以下逻辑:

DocumentSnapshot<Map<String, dynamic>> snapshot;

if(connectivityStable){
  snapshot = await docData.get();
}else{
  try{
    snapshot = await docData.get(const GetOptions(source: Source.cache));
  }catch(e){
            
  }
}

更新方案

正如@Doug Stevenson所说,无法捕获上述警告日志,因此改用onTimeout操作来处理:

DocumentSnapshot<Map<String, dynamic>> snapshot;
snapshot = await docData.get().timeout(const Duration(seconds: 2),onTimeout: (){
    try{
      return docData.get(const GetOptions(source: Source.cache));
    }catch(e){
      return snapshot;
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:13