流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段

Posted

技术标签:

【中文标题】流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段【英文标题】:Problem with stream and firebase Bad state: field does not exist within the DocumentSnapshotPlatform 【发布时间】:2021-10-26 23:18:18 【问题描述】:

我有一个 StreamBuilder,它旨在根据正在传递的变量从 firestore 中获取文档列表,尽管我遇到了上述错误。

流生成器

StreamBuilder<QuerySnapshot>(
          stream: DatabaseService.getFeedPosts(widget.currentUserId),
          builder: (context, snapshot) 
            if (snapshot.hasError) print(snapshot.error);
            if (snapshot.connectionState == ConnectionState.waiting) 
              return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    CircularProgressIndicator(),
                    // Loader Animation Widget
                    Padding(padding: const EdgeInsets.only(top: 20.0)),
                    Text('Finding tasks'),
                  ],
                ),
              );
            
            if (snapshot.hasData) 
              final documents = snapshot.data.docs;

              return ListView(
                  children: documents
                      .map(
                        (doc) => TaskList(
                          currentUserId: widget.currentUserId,
                          task: doc['id'],
                          user: doc['ownerId'],
                        ),
                      )
                      .toList());
             else if (snapshot.hasError) 
              print('Error');
              return Text('It\'s Error!');
            
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('Unable to  find any tasks'),
                ],
              ),
            );
          ),

Firebase 查询

static Stream<QuerySnapshot> getFeedPosts(String userId) 
    return tasksRef
        .where('authorId', isEqualTo: userId)
        .orderBy('timestamp', descending: true)
        .snapshots();
  

【问题讨论】:

【参考方案1】:

您应该在使用[] 运算符之前从QueryDocumentSnapshot 调用data() 方法:

return ListView(
  children: documents
  .map(
    (doc) => TaskList(
      currentUserId: widget.currentUserId,
      task: doc.data()['id'],
      user: doc.data()['ownerId'],
    ),
  )
  .toList(),
);

【讨论】:

我已经在模型中这样做了,但我需要再做一次吗? 我相信您期望来自 Firestore 的地图并尝试访问其键为 idownerId 的条目的值。但是,docQueryDocumentSnapshot。要从doc 访问地图,您需要先检索它,这将使用data() 方法。

以上是关于流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段的主要内容,如果未能解决你的问题,请参考以下文章

性能不佳的 SQL 查询

Flutter Firebase:状态不佳:快照既没有数据也没有错误

如何解析格式不佳的 HTML 文件?

在 AVPlayer 中播放网络不佳的流

迁移到命名标准不佳的 Arc

为啥使用 EF / Linq to sql 创建性能不佳的查询如此容易[关闭]