如何在 Flutter 应用程序中以离线模式使用 firebase 实时数据库?

How to use firebase realtime-database in offline mode in Flutter app?

我发现了 Firebase 离线功能的一个很棒的功能。在初始化 Firebase await FirebaseDatabase.instance.setPersistenceEnabled(true);

后,我通过在我的 main.dart 文件中编写一行代码将其集成到我的应用程序中

问题 1:
我无法理解 database.keepSynced(true) 函数,因为如果不使用这行代码,我的应用程序会保留旧数据并获取新的更新数据,那么这到底是做什么的?

问题 2 :
我怎么能在用户离线时阻止写入操作,因为我读到在启用持久性后,它会生成一个写入操作队列并在用户上线时更新它们,所以我怎么能阻止它呢?

问题 3 :
此持久性功能是否也适用于 IOS 设备,还是需要先进行一些权限设置?

谢谢

当您调用 FirebaseDatabase.instance.setPersistenceEnabled(true) 时,您允许 Firebase 在设备上创建一个本地文件,它保存最近读取的任何数据,以及设备离线时所有待处理的写入。

当您在节点上调用 keepSynced(true) 时,您是在告诉 SDK 始终保持该节点同步。它实际上在节点上创建了一个 onValue 侦听器,没有任何处理程序代码,因此您这样做纯粹是为了在设备 离线时保持数据同步。

通过将 keepSynced(true)setPersistenceEnabled(true) 结合使用,您指定了您希望应用在离线重启后继续工作,以及为此需要哪些数据。

如果您在数据库的根目录上调用 keepSynced(true),您是在告诉 SDK 将数据库中的 所有 数据同步到磁盘缓存。虽然这最初可能是让您的应用程序运行离线模式的快速方法,但当您有更多人开始使用您的应用程序时,它通常不会扩展。


如果您只想在客户端连接到数据库后端时允许写操作,您可以向 .info/connected 节点注册一个本地侦听器,当有 true 值时是连接,否则 false

请注意,Firebase 不需要这样做,因为它会将挂起的写入排队并在连接恢复时执行它们。总的来说,我建议在这里 系统一起工作而不是反对它,并尝试让您的应用程序在离线场景中正常工作。在许多情况下,应用程序处于离线状态时无需禁用功能。


离线磁盘持久性在 Android 和 iOS 上可用,但在 Web 上不可用。