开发者社区 问答 正文

颤振修复查询快照没有getter文档的实例

但是,我使用它从消防局数据库获取消息列表,这给我带来了一个错误:

Fltter:抛出了以下NoSuchMethodError构建:Fltter:类‘QuerySnapshot’没有实例getter‘Document’。颤振:接收者:查询快照的实例,颤音:尝试调用:文档

我使用的代码是:

StreamBuilder(
                stream: Firestore.instance
                    .collection('messages')
                    .document(groupId)
                    .collection(groupId)
                    .orderBy('timestamp', descending: true)
                    .snapshots(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if (!snapshot.hasData) {
                    return Center(
                      child: CircularProgressIndicator(),
                    );
                  } else {
                    listMessage = snapshot.data.documents;
                    return ListView.builder(
                      padding: EdgeInsets.all(10.0),
                      itemBuilder: (context, index) =>
                          buildItem(index, snapshot.data.document[index]),
                      itemCount: snapshot.data.documents.length,
                      reverse: true,
                      controller: scrollController,
                    );
                  }
                },
              ),

我刚开始使用FiRESTORE,这里有人能帮忙吗?

展开
收起
游客5akardh5cojhg 2019-12-14 17:57:43 369 分享 版权
阿里云 AI 助理回答

你遇到的错误是因为在Flutter中使用Firebase Firestore时,QuerySnapshot类没有直接的documents属性或方法了。从Firestore的Flutter插件的一个较新版本开始,数据是以QuerySnapshot.docs的形式提供的,而不是之前的.documents

为了修复你的代码,请将涉及到documents的地方改为使用.docs,同时对于每个文档项,你应该直接从snapshots数据中通过索引获取,而不是尝试调用不存在的document方法。下面是修改后的代码示例:

StreamBuilder<QuerySnapshot>(
                stream: Firestore.instance
                    .collection('messages')
                    .document(groupId)
                    .collection(groupId)
                    .orderBy('timestamp', descending: true)
                    .snapshots(),
                builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
                  if (!snapshot.hasData) {
                    return Center(
                      child: CircularProgressIndicator(),
                    );
                  } else {
                    List<DocumentSnapshot> documents = snapshot.data.docs; // 修改这里
                    return ListView.builder(
                      padding: EdgeInsets.all(10.0),
                      itemBuilder: (context, index) =>
                          buildItem(index, documents[index]), // 修改这里
                      itemCount: documents.length,
                      reverse: true,
                      controller: scrollController,
                    );
                  }
                },
              ),

这样修改后,你的代码应该能正确地从Firestore获取数据并构建列表视图了。记得检查你的buildItem函数是否也需要根据DocumentSnapshot的变更进行调整。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: