如何在 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 上不可用。
我发现了 Firebase 离线功能的一个很棒的功能。在初始化 Firebase await FirebaseDatabase.instance.setPersistenceEnabled(true);
问题 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 上不可用。