Flutter Firebase数据库持久性不起作用

all*_*eep 3 persistence offline-caching dart firebase-realtime-database flutter

我正在使用版本1.0.1中的firebase_database插件,目前正在Android上进行测试。

我单身访问数据库。

 GlobalFBInstance._internal() {
   final firebaseInstance = FirebaseDatabase.instance;

   firebaseInstance.goOnline();
   firebaseInstance.setPersistenceEnabled(true);
   firebaseInstance.setPersistenceCacheSizeBytes(10000000);

   databaseRef = firebaseInstance.reference();
   databaseRef.keepSynced(true);

   storageRef = FirebaseStorage.instance.ref();
}
Run Code Online (Sandbox Code Playgroud)

每次重新启动应用程序后,该应用程序都需要Internet才能获取数据库。我以为持之以恒并保持同步,不需要互联网吗?如果我的连接非常不好(在仿真器和设备上进行了测试),那么从数据库中加载包含四个简单字符串的gridview会花费很多时间。

当我使用以下命令加载数据快照时:

 Future<DataSnapshot> getDatabaseSnap(String location) async {
    var _newref = databaseRef.child(location);
    await _newref.keepSynced(true);
    return await _newref.once();
 }
Run Code Online (Sandbox Code Playgroud)

如果互联网连接速度慢,它将不会加载。

这可能是什么原因?有没有更好的方法来确保数据库每次都不需要连接?

提前致谢。

编辑:等待持久性时,我得到错误:

 bool ispersistant = await firebaseInstance.setPersistenceEnabled(true);
Run Code Online (Sandbox Code Playgroud)

Par*_*wal 5

不要使用FirebaseInstance切换持久性存储。使用FirebaseDatabase对象保存实例,然后将其设置为启用。

FirebaseDatabase database;
database = FirebaseDatabase.instance;
database.setPersistenceEnabled(true);
database.setPersistenceCacheSizeBytes(10000000); // 10MB cache is enough
Run Code Online (Sandbox Code Playgroud)

  • 我也曾在 flutter 上与 firebase 作斗争,然后突然我的这段代码不知不觉地工作了。然后我意识到持久存储是针对整个数据库而不是针对实例。启用后,您不必每次都打开它。 (2认同)