我以为我了解StreamBuilders,但是我有些疑惑困扰着我。

我以为ConnectionState.waiting意味着正在创建与流的连接,因此仍然无法接收流数据。
不过,就我而言,我始终会收到ConnectionState.waiting。第一次使用的数据是在initialData中指定的数据,这很好,但是如果ConnectionState始终为“waiting”,则在从流evnt获取值之后。
要在此处显示此内容,您可以看到第一次调用builder函数的屏幕截图。这看起来不错:快照值是initialData参数提供的值,并且ConnectionState正在等待
dart - StreamBuilder快照始终为ConnectionState.waiting-LMLPHP

这是第二次调用builder函数的屏幕截图。
dart - StreamBuilder快照始终为ConnectionState.waiting-LMLPHP

这里的快照值是一个新的流值(因此连接状态现在应该处于 Activity 状态),但实际上,connectionState仍在等待!

  • 那么我应该怎么解释呢?这是如何运作的?
  • 即使connectionState始终在等待,为什么StreamBuilder仍继续接收快照?为什么它不活跃?
  • 我该如何调试?
  • 最佳答案

    这可能是您的Firestore规则。如果是这样的话:

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth.uid != null;
        }
      }
    }
    
    那么您将没有经过身份验证即可获取数据。您可以通过允许任何人访问数据库来快速(但不是永久地)测试此问题。
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }
    
    ...但是请稍后再将其更改为更安全的名称。

    10-05 23:52