如何在 Flutter 中为 Firebase 连接设置监听器?

Posted

技术标签:

【中文标题】如何在 Flutter 中为 Firebase 连接设置监听器?【英文标题】:How to setup a listener for Firebase connectivity in Flutter? 【发布时间】:2021-01-23 06:32:13 【问题描述】:

所以我试图捕捉“无网络”错误。

我正在听这样的 Firestore 中的文档:

final docRef = FirebaseFirestore.instance.collection(kInfoCollection).doc(kInfoDocument);

docSubscription = docRef.snapshots().distinct().listen((_) );

docSubscription.onData((snapshot) => _processInfo(snapshot))

docSubscription.onError((e, s) 
        final errorMessage = 'Message:\n$e \nThe Stack was:\n$s';
        print('Error $errorMessage');
        throw InfoException(errorMessage);
      );

如您所见,侦听器正在侦听文档,如果捕获到任何错误,则会抛出错误。

但是没有捕获到控制台中显示的这些 Firebase 错误:

Connection 1: encountered error(1:53)
6.26.0 - [Firebase/Firestore][I-FST000001] WatchStream (283fb4118) Stream error: 'Unavailable: Network connectivity changed'
6.26.0 - [Firebase/Firestore][I-FST000001] WatchStream (283fb4118) Stream error: 'Unavailable: DNS resolution failed'
6.26.0 - [Firebase/Firestore][I-FST000001] WatchStream (283fb4118) Stream error: 'Unavailable: DNS resolution failed'
6.26.0 - [Firebase/Firestore][I-FST000001] WatchStream (283fb4118) Stream error: 'Unavailable: failed to connect to all addresses'

我错过了什么吗?

附加信息:我通过在手机上进入飞行模式来模拟这一点。否则不会出错。

【问题讨论】:

我也遇到了同样的问题,你找到解决办法了吗? 感谢您的支持,不幸的是我还没有解决方案。希望有人会很快。 为什么我们得到了 8 个赞,而 Firebase 没有人回答? 【参考方案1】:

您可以使用connectivity_plus 插件来发现网络连接并相应地捕获这些错误。

【讨论】:

【参考方案2】:

关于这个问题你可能会觉得很有趣:how to catch error in firestore when no internet

这似乎是一种正常的行为,以避免仅仅因为暂时没有连接而破坏应用程序。

即使这个问题已经 7 个月了,我希望这对您有所帮助。

【讨论】:

以上是关于如何在 Flutter 中为 Firebase 连接设置监听器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在firebase-flutter中为快照数据指定字段[重复]

使用 Flutter 测试 Firebase 云消息传递

将 Flutter App 的 iOS 部分连接到 Firebase 的困惑

从 Flutter 应用通过本地网络连接到 Firebase 函数模拟器

从 Flutter 应用程序连接到本地 Firebase 函数模拟器时出错

Flutter 无法连接到 Firebase Firestore 数据库