我注意到,如果连接信号较低,Firestore读取需要更长的时间。如果我在稳定的网络中,它工作得很好。我的应用程序被用户积极使用,每个读取操作都非常重要,无论它来自服务器(如果设备在线)或缓存(如果设备离线)。
我目前的代码如下所示,如果信号较低,需要大约5秒才能接收到数据:
final snapshot = await docData.get();
我想实现的是将低连接视为离线,而不让Firestore尝试阅读数据。
我从Firestore的vscode调试控制台得到了这个警告日志,如果可能的话,我想捕捉它:
带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史蒂文森,所以我将使用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;
}
});
1条答案
按热度按时间tyu7yeag1#
不可能捕捉到警告日志。相反,我将通过使用onTimeout操作来处理它。
如果源future在2秒内未完成,则执行[onTimeout]操作。关于https://api.flutter.dev/flutter/dart-async/Future/timeout.html的更多信息