Firebase 为什么我的生成器函数要执行两次?

Firebase 为什么我的生成器函数要执行两次?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我想检查是否存在使用此用户名和帐户类型的集合,这意味着我想查看用户是否是高级用户 应用程序运行时的输出为: 好啊 用户 好啊 模型 为什么它会打印两次“ok”,看起来快照既有数据也没有数据 这是代码的一部分,如果没有说明什么,我将提供完整的类: @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Container(

我想检查是否存在使用此用户名和帐户类型的集合,这意味着我想查看用户是否是高级用户

应用程序运行时的输出为: 好啊 用户 好啊 模型

为什么它会打印两次“ok”,看起来快照既有数据也没有数据

这是代码的一部分,如果没有说明什么,我将提供完整的类:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: isLoading
          ? Container(
              child: Center(child: CircularProgressIndicator()),
            )
          : StreamBuilder(
              stream: Firestore.instance
                  .collection('users')
                  .where('email', isEqualTo: email)
                  .where('account', isEqualTo: 'model')
                  .snapshots(),
              builder: (context, snapshot) {
                print('ok');
                if (!snapshot.hasData) {
                  box.put('account', 'user');
                  print(box.get('account'));
                } else {
                  box.put('account', 'model');
                  print(box.get('account'));
                }
                return Container(...

提前感谢您,也许有最简单的方法可以查看是否存在使用此类数据的收集?

据我所知,这是按预期进行的。当您的小部件首次呈现时,它开始从Firestore加载
流的数据。此时,
snapshot.hasData
仍然是
false
,因此它使用
if
块呈现小部件


然后,当数据变得可用时,流被更新,这将触发小部件再次呈现。此时,
snapshot.hasData
true
,因此它使用
else
块呈现您的小部件。

isLoading
可能多次被触发,导致函数多次运行