与 Flutter 中的 Provider 包相关,Firestore 是如何计算读取次数的?

How does Firestore count reads as it relates to the Provider package in Flutter?

当我打电话时:

final user = Provider.of<CustomUser?>(context);

My Provider 的下游,然后调用 user.email... 这算作 'Read' 吗?

为了进一步了解登录时的上下文,我调用 ('Read' 1?):

Future signIn(String email, String password) async {
    await _authService.signInWithEmailAndPassword(
        email: email, password: password);
    print('Sign In');
    User? user = _authService.currentUser;

然后我调用 ('Read' 2?):

CustomUser loggedInUser = CustomUser();
    await FirebaseFirestore.instance
        .collection("users")
        .doc(user!.uid)
        .get()
        .then((value) {
      loggedInUser = CustomUser.fromMap(value.data());
    });

我在哪里将用户信息从我的 firestore 集合映射到我的 CustomUser 对象。然后我通过流提供程序传递 CustomUser(我想我将更改为 Change Notifier Provider,但这应该与这个问题无关......):

Widget build(BuildContext context) {
    return StreamProvider<CustomUser?>.value(
      value: AuthService().user,
      initialData: null,
      child: MaterialApp(
        home: Home()

然后我在家里打电话:

final user = Provider.of<CustomUser?>(context);

并用 user.email、user.name 等填充一些文本小部件...这也算作阅读吗?换句话说,上述逻辑算作 2 次还是 3 次读取到 firebase?

每次您调用 get() 时,Firestore SDK 都必须连接到服务器,以至少检查是否有更新版本的文档。这是收费文档阅读。

我建议查看 onSnapshot,它会在文档上保持活跃的侦听器,因此在创建侦听器时只需与服务器核对一次,然后只获取更新的文档(因此有更新时阅读收费文档。