gpt4 book ai didi

google-cloud-firestore - 如何在本地存储 Firestore 文档?

转载 作者:IT王子 更新时间:2023-10-29 07:00:44 25 4
gpt4 key购买 nike

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

由于文档不经常更改,我想做这样的事情......

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

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

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

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

这是个好主意吗?关于如何实现这个有什么建议吗?

最佳答案

这是我最后做的。这实际上相当简单。我将其实现为静态类,但不确定这是否是最佳方法。但我喜欢其他一切。

我创建了一个类,它为文档设置了一个监听器,并在更新时提供了一个流。作为一些副业,我的类(class)还将文档解析为 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}');
});
}
}

关于google-cloud-firestore - 如何在本地存储 Firestore 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51317606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com