【问题标题】:Flutter Firebase Database persistence not workingFlutter Firebase 数据库持久性不起作用
【发布时间】:2018-12-01 00:48:51
【问题描述】:

我正在使用 1.0.1 版的 firebase_database 插件,flutter 目前正在 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();
}

应用程序每次重启后都需要互联网来获取数据库。我认为有了持久性和保持同步就不需要互联网了吗?如果我有一个非常糟糕的连接(在模拟器和设备上测试),它需要永远加载一个包含来自数据库的四个简单字符串的 gridview。

当我加载数据快照时:

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

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

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

提前致谢。

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

 bool ispersistant = await firebaseInstance.setPersistenceEnabled(true);

【问题讨论】:

  • 那么你的问题是持久化需要很长时间还是根本没有加载?
  • 当我关闭应用程序或应用程序被系统关闭(重启、内存管理......)时,没有持久性。每次应用关闭时都必须有互联网连接或根本没有内容
  • 您共享的代码中还没有读取任何数据。请更新以包含minimal-yet-complete code that is needed to reproduce the problem。
  • 我在打开快照的地方编辑了代码,但我认为没有必要。

标签: firebase-realtime-database dart persistence flutter offline-caching


【解决方案1】:

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

FirebaseDatabase database;
database = FirebaseDatabase.instance;
database.setPersistenceEnabled(true);
database.setPersistenceCacheSizeBytes(10000000); // 10MB cache is enough

【讨论】:

  • 这行得通。谢谢你。你能解释一下实例和数据库作为主要对象的区别吗?
  • 我也曾在颤振上与 firebase 作斗争,然后突然间我的这段代码在不知不觉中工作了。然后我意识到持久存储是针对整个数据库而不是针对一个实例的。一旦启用,您就不必每次都打开它。
猜你喜欢
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2016-10-19
相关资源
最近更新 更多