【问题标题】:Firebase offline persistence Flutter DeleteFirebase 离线持久化 Flutter Delete
【发布时间】:2019-05-22 11:07:47
【问题描述】:

我在 Flutter 中为我的聊天应用程序提供了离线持久性。

我希望当我在 Firebase 控制台上删除/清除数据时,保存的数据仍将存储在手机存储中。看来根本不是这样的。

有解决办法吗?像 Override 一样?(从服务器/后端删除,但保留在本地存储中)

我的另一个选择是:

将来自 firebase 的传入数据转换为 sqflite 数据库架构。将 Sqflite 数据作为列表视图显示到用户显示器上

尽量减少存储在 Firebase 上的数据。 (内置发送标志,以确保用户在后端清除消息之前收到消息)

这对于群聊中的多人来说是否足够实时?因为添加了显示消息的步骤?

继续在用户手机上显示传入的 Firebase 消息(实时) 数据还在后台。 每 2 周更新用户本地存储并备份旧消息。 删除后端数据。

对于最后一个选项,我如何将旧消息 (sqflite) 与当前消息 (firebase) 合并?将 sqflite 聊天消息按时间戳排序并与 firebase 一起显示,好吗?

谢谢 -F.T

【问题讨论】:

  • 关于以下数据库行为原因的基本答案。很难回答您的其他问题,因为它们现在非常广泛。你会发现你在 Stack Overflow 上得到的答案变得更加具体,因为你提出了一个更具体的问题。例如:您对性能有什么具体问题?你有代码和日志输出来说明吗?

标签: android firebase flutter


【解决方案1】:

Firebase 中的两个数据库(实时数据库和 Cloud Firestore)主要是云托管数据库,当您的应用暂时未连接到云端时,它们会继续工作。它们并非旨在用作纯粹的独立数据库。

可能有一些技巧可以阻止 Firebase 清除本地数据。例如,我看到开发人员在实时数据库初始同步后将用户标记为离线。但是,虽然这种方法可能在短期内奏效,但由于它们违背了数据库的意图,因此很可能会导致问题。

【讨论】:

  • 嘿弗兰克,谢谢你的回复。我知道我对此有点晚了。我一直在努力开发我的颤振应用程序。我已经得出结论,我的应用程序的未来不会通过 SQLFLITE 插件在本地保存数据。我还将在下面发布如何将输入流数据从 firebase 获取到 SQL 以及一些优缺点的答案。
【解决方案2】:

如何通过 Sqflite 插件从后端(例如 Firebase 实时数据库)获取传入数据流到本地存储:

我需要并且想要列出的一些问题: 使用 statefulwidget,只要设置状态在代码中,并且在离开/进入 statefulwidget(也发生在 statelesswidget 中)时,它就会不断重建流

此问题导致数据作为重复数据保存到 SQFLITE

你可以这样做,做一个按钮,当你按下它时..这段代码将执行: 粗略的代码:不完整。我没有测试我刚刚写的这个确切的代码

Timestamp _timeStamp = previousSyncTimeStamp;
FlatButton(
 child: Text('Sync Data'),
 onPressed: () {
     syncData(_timeStamp);
     Timestamp previousSyncTimeStamp = currentTime;
     }
)

void syncData() {
        FirebaseDatabase.instance
        .reference()
        .child('yourChild')
        .startAt(_timeStamp)

    //this is your incoming data stream from a back end.
    //then with your created Sqflite schema in your flutter app

    //grab the snapshot data from the stream and put it into your object(sqflite)

        Object someObj = Object(snapshot.value['someValue'], snapshot.value['someOtherValue']);
        var dbHelper = DBHelper();
        dbHelper.saveObject(someObj);
}

现在您已将 firebase 后端与本地 sqflite 同步,而不会出现重复。使用时间戳确保您不会错过任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 2021-10-27
    • 2020-11-15
    • 2017-04-05
    • 2020-11-22
    • 2012-02-08
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多