database - 如果没有互联网连接,我们如何处理用户的输入
问题描述
我认为如果有 Internet 连接,我们都可以轻松地处理编程,特别是如果我们正在处理服务器,但是先生们,如果用户没有 Internet 连接,会有可怕和令人不安的结果,想象一下有一个连接到 Internet 的服务器与用户的输入进行交互,我经常想知道在这种情况下全局应用程序使用什么
我要简单地说我面临的问题是什么
我正在使用 dart 和 Firebase 构建 Flutter 应用程序 .. 可以说用户将数据发送到firestore
假设它是一条消息,例如
int count ;
FirebaseFirestore.instance.collection(widget.documentUid).doc(currentUser.uid).set({
"timestamp": DateTime.now(),
"name": currentUser.name,
"receiverUid": widget.documentUid,
"countM" : count++
});
好吧,如果用户有互联网连接,这里一切都会完美。
我注意到的是,在没有互联网连接的情况下,相同的过程是发送的数据不会再次等待连接,因此该过程将被取消..这是一种耻辱:(..用户永远不会接受喜欢这个应用程序..它只是许多喜欢计数消息和删除消息和阅读消息的一个例子,我开发它们以响应服务器我如何处理这个问题..
并且请没有人告诉我之前要进入互联网状态,因为这个过程本身永远不会让数据等待,
是否有数据缓存控件?
有没有处理这个的图书馆?
有没有办法在没有互联网连接的情况下控制用户的输入并让它等到再次连接并执行而不会丢失任何东西?
我错过了什么重要的事情吗?
解决方案
这个过程不是自动化的。您必须自己处理线下/线上案件。
此软件包允许您流式传输连接状态: https ://pub.dev/packages/connectivity_plus
每当流更改时,您可以将其与提供程序一起使用来重建 UI。
此外,firebase 本身具有一定程度的缓存,但我建议使用像 hive 这样的离线数据库与您的在线数据同步,以防互联网连接丢失。您还可以在连接丢失时将导航器的状态存储在数据库中并切换到离线数据库。当连接恢复时,重新加载状态并继续。如果只显示在线数据,请创建一个显示 Internet 连接丢失的页面并使用连接流切换 UI。
至于消息,不要在您的 Firestore 写入中使用异步,当互联网连接重新打开时,它会自动写入数据库。但同样,如果应用程序在互联网丢失时关闭,则不会发生这种情况。为了实现这一点,当互联网离线时,将消息存储在 hive db 中,然后当它重新上线或用户通过互联网启动应用程序时,它将推送带有相关时间戳的消息。