Firebase 注销应用程序时调用.setPersistenceEnabled(false),不工作

Firebase 注销应用程序时调用.setPersistenceEnabled(false),不工作,firebase,flutter,firebase-realtime-database,dart,persistence,Firebase,Flutter,Firebase Realtime Database,Dart,Persistence,在我的Flatter/Dart移动应用程序中,我使用Firebase RTDB持久性来支持离线使用该应用程序 我的理解是,要启用持久性,您必须在使用任何数据库引用(如查询数据库)之前,按照以下代码段进行调用。我使用以下代码在加载应用程序后立即启用持久性,效果良好: FirebaseDatabase firebaseDatabase = FirebaseDatabase.instance; bool _success = await firebaseDatabase.setPersistenceE

在我的Flatter/Dart移动应用程序中,我使用Firebase RTDB持久性来支持离线使用该应用程序

我的理解是,要启用持久性,您必须在使用任何数据库引用(如查询数据库)之前,按照以下代码段进行调用。我使用以下代码在加载应用程序后立即启用持久性,效果良好:

FirebaseDatabase firebaseDatabase = FirebaseDatabase.instance;
bool _success = await firebaseDatabase.setPersistenceEnabled(true);
print(_success); // Prints true, so persistence is set 'on'.
当我注销应用程序时,我尝试通过以下方式关闭持久性:

bool _success = await firebaseDatabase.setPersistenceEnabled(false);
print(_success); // Prints false, so persistence is still 'on', ie. the call failed.
我假设无法关闭持久性的原因是,在尝试关闭之前,已经有对db引用的调用

我想这会引出三个问题:

当我注销时,我是否应该担心关闭它?我尝试这样做的原因主要是良好的家务管理。当注销运行时,我会清理共享首选项,关闭keepsyncd等。另外,尽管如此,用户可以有多个userid登录,我希望确保我没有保留他们以前登录id中的持久化数据。 与1相关,将persistence设置为false是否清除的缓存 对数据库的数据和潜在排队调用? 如果1和2的答案是“是”,那么如果我使用的代码一直告诉我它失败了,我如何关闭持久性呢?
处理此问题的典型方法是在用户登录后启用持久性

一旦启用了磁盘持久性并且您的应用程序使用了数据库,就无法将其关闭。文件中提到了这一点:

如果操作成功,则返回的Future将以true完成;如果由于已创建数据库引用而无法设置持久性,则返回的Future将以false完成

最后一点对您来说显然是这样的:您已经在使用数据库了,这意味着磁盘持久性已启用

对于您的具体问题:

不幸的是,目前无法通过API清除本地缓存中的数据。它是有效的,但现在您必须假设设备上的任何数据都可以被该设备或设备配置文件上的任何用户看到。 禁用磁盘持久性将阻止客户端向缓存添加数据。它不会清除缓存中的任何现有数据。
谢谢你,弗兰克。我就是这么想的。我将考虑提出一个功能请求。对不起,忘记了。现在完成。期待着看到您达到500公里:-