我的聊天应用程序在离线状态下持续工作。
我希望在Firebase控制台上删除/清除数据时,保存的数据仍将存储在手机存储中。似乎根本不是这种情况。
是否有解决方法?就像覆盖?(从服务器/后端删除,但将其保留在本地存储中)
我的另一个选择是:
将来自Firebase的传入数据转换为sqflite数据库架构。将Sqflite数据以列表视图的形式显示在用户显示屏上
将Firebase上存储的数据保持在最低限度。 (内置已发送标志,以确保用户在后端清除消息之前已收到该消息)
对于群聊中的多个人来说,这是否足够实时?是因为增加了显示消息的步骤?
OR
继续在用户电话上显示传入的Firebase消息(实时) 数据仍在后端。 每两周更新一次用户本地存储并备份旧邮件。 删除后端数据。
对于最后一个选项,我如何合并旧消息(sqflite)和当前消息(firebase)?按时间戳对sqflite聊天消息进行排序并将其与Firebase一起显示是否可以?
谢谢 -F.T
答案 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上玩耍,以确保您不会错过任何内容。