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



我发现了Firebase离线功能的一个奇妙功能。我在初始化Firebaseawait 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上不可用。

最新更新