Firebase离线持久性Flutter Delete

时间:2018-12-22 07:39:36

标签: android firebase flutter

我的聊天应用程序在离线状态下持续工作。

我希望在Firebase控制台上删除/清除数据时,保存的数据仍将存储在手机存储中。似乎根本不是这种情况。

是否有解决方法?就像覆盖?(从服务器/后端删除,但将其保留在本地存储中)

我的另一个选择是:

将来自Firebase的传入数据转换为sqflite数据库架构。将Sqflite数据以列表视图的形式显示在用户显示屏上

将Firebase上存储的数据保持在最低限度。 (内置已发送标志,以确保用户在后端清除消息之前已收到该消息)

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

OR

继续在用户电话上显示传入的Firebase消息(实时) 数据仍在后端。 每两周更新一次用户本地存储并备份旧邮件。 删除后端数据。

对于最后一个选项,我如何合并旧消息(sqflite)和当前消息(firebase)?按时间戳对sqflite聊天消息进行排序并将其与Firebase一起显示是否可以?

谢谢 -F.T

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如何通过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同步了,没有重复..在timeStamp上玩耍,以确保您不会错过任何内容。