【问题标题】:How to use firebase realtime-database in offline mode in Flutter app?如何在 Flutter 应用程序中以离线模式使用 firebase realtime-database?
【发布时间】:2022-02-16 04:39:18
【问题描述】:

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

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

问题 2:
当用户离线时如何防止写操作,因为我读到在启用持久性后,它会创建一个写操作队列并在用户上线时更新它们,那么我该如何阻止呢?

问题 3:
这个持久性功能是否也可以在 IOS 设备中使用,还是需要先进行一些权限设置?

谢谢

【问题讨论】:

    标签: firebase flutter firebase-realtime-database caching


    【解决方案1】:

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

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

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

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


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

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


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

    【讨论】:

      猜你喜欢
      • 2022-08-04
      • 2022-08-14
      • 1970-01-01
      • 2019-03-27
      • 2015-11-01
      • 2020-07-26
      • 2012-04-13
      • 2021-07-17
      • 2021-12-18
      相关资源
      最近更新 更多