如何在本地存储Firestore文档?

达卡莫霍

我有一个Firestore文档,该文档很少更改,并且在我的应用程序中的许多不同位置用作查找表。据我了解,获取文档时,即使文档中的数据没有更改,它也总是在执行服务器查询。仅当服务器不可用时才使用本地缓存。

由于该文档很少更改,因此我想做这样的事情...

1)应用启动后,获取文档并将其存储在本地。

2)设置一个侦听器,以便在文档更改时更新本地副本。

3)更新本地副本后,将此更改广播到可能正在使用该文档的任何小部件。

这是我希望Firestore默认工作的方式。

这是一个好主意吗?关于如何实施此建议?

达卡莫霍

这就是我最终要做的。实际上,这很简单。我将其实现为静态类,并且不确定这是否是最佳方法。但是我喜欢其他一切。

我创建了一个类,该类为文档设置了侦听器,还提供了更新文档的流。作为辅助工作,我的班级还将文档解析为Map并对游戏进行排序。

import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:async';
import 'package:pari/game.dart';

class Schedule {
  static Map<String, Game> games = Map<String, Game>();

  static StreamController<Map<String, Game>> _onUpdateController = StreamController.broadcast();
  static Stream get onUpdate => _onUpdateController.stream;

  static void setupListener() {
    print('setupListener');

    DocumentReference reference = Firestore.instance.collection('schedule').document('2018');
    reference.snapshots().listen((documentSnapshot) {
      print('listen begin');

      List<Game> sortedList = List<Game>();
      documentSnapshot.data.values.forEach((value) {
        Game game = Game.fromMap(value);
        sortedList.add(game);
      });
      sortedList.sort((a,b) => a.startTime.compareTo(b.startTime));

      games.clear();
      sortedList.forEach((game) {
        games.addAll({game.key: game});
      });

      _onUpdateController.add(games);

      print('listen end');
      print('games: ${games.length}');
    });
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在本地存储结构复杂的Google Cloud Firestore数据?

如何在flutter firestore中将文档的ID存储在同一个文档中

Cloud Firestore-Python-如何在使用admin sdk流式传输的文档中获取本地时区

如何在本地存储数据

如何在本地存储中存储变量?

如何在本地存储角度存储数组?

如何在Firestore(Java)中删除文档?

如何在Firestore中加入多个文档?

如何在Firestore文档的字段中搜索

Firestore如何存储对文档的引用/如何检索它?

如何在Firestore中的嵌套文档中更新嵌套文档?

如何在本地存储表格数据

如何在本地存储中收集表列

如何在html上显示本地存储

BreezeJS如何在本地缓存或存储数据

如何在本地正确存储密码

如何在本地存储中设置主题?

如何获取 firebase 存储的下载 url 并更新 firestore 文档?

如何将Firestore文档与存储文件安全连接

如何在Firestore中存储精确数字

如何在Firestore中存储数据(Swift)

如何在本地存储中存储对象数组?

如何在本地存储中存储完整的div

如何在本地存储中存储<input type =“ range”>的值?

如何在本地存储中存储多个项目?

如何在本地为导入的 pod 生成文档

如何在没有 png 或 jpeg 表示的情况下将 .raw 或原始字节的图片存储到本地磁盘文档文件夹

SwiftUI:如何在Firestore中读取特定文档?

如何在Streambuilder中查询Firestore文档并更新ListView