firebase 阅读Firestore数据时,如何将连接不良视为无连接?

jhkqcmku  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(142)

我注意到,如果连接信号较低,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;
    }
});
tyu7yeag

tyu7yeag1#

不可能捕捉到警告日志。相反,我将通过使用onTimeout操作来处理它。
如果源future在2秒内未完成,则执行[onTimeout]操作。关于https://api.flutter.dev/flutter/dart-async/Future/timeout.html的更多信息

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;
    }
});

相关问题