如何在读取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
相关产品推荐
相关产品推荐

