当前位置: 首页 > 知识库问答 >
问题:

颤振/Firestore:类“QuerySnapshot”没有实例getter“document”

松飞翮
2023-03-14

我有一个应用程序,我想从Firestore数据库中检索uid文档中表示的消息,如下所述,这些消息存储如下:聊天室-

但我收到以下错误:

生成StreamBuilder时引发了以下NoSuchMethodError(脏,状态:\u StreamBuilderBaseState

导致错误的相关小部件是:StreamBuilderfile:///Users/ahmedhussain/Downloads/khamsat/Client应用程序/HPX-KSA/HPX\U KSA/库/屏幕/消息。dart:21:12引发异常时,这是堆栈:#0对象。noSuchMethod(dart:核心补丁/对象补丁。dart:53:5)#1 \u消息状态。聊天室列表。(包装:hpxksa/屏幕/消息。dart:25:38)

这是我的代码:

class _MessagesState extends State<Messages> {
  
  Stream chatRoomsStream;

  Widget chatRoomList(){
    return StreamBuilder(
      stream: chatRoomsStream,
      builder: (context, snapshot){
        return snapshot.hasData ? ListView.builder(
            itemCount: snapshot.data.document.length,
            itemBuilder: (context, index){
              return ChatRoomTile(
                 username: snapshot.data.documents[index].data["chatRoomId"]
                      .toString().replaceAll("_", "").replaceAll(Constants.myName, "replace"),
                  chatRoomId:snapshot.data.documents[index].data["chatRoomId"]
              );
            }) : Container();
      }
      );
  }

  getUserInfogetChats() {
    DatabaseService().getChatRooms(Constants.myName).then((value) {
      setState(() {
        chatRoomsStream = value;
      });
    });
  }

  @override
  void initState() {
    getUserInfogetChats();
    super.initState();
  }


@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: chatRoomList(),
    );
  }
}


class ChatRoomTile extends StatelessWidget {
  final String username;
  final String chatRoomId;
  ChatRoomTile({this.username, this.chatRoomId});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: (){
        Navigator.push(context, MaterialPageRoute(builder: (context)=>Conversation(chatRoomId: chatRoomId,)));
      },
      child: Container(
        color: Colors.black26,
        padding: EdgeInsets.symmetric(horizontal: 24, vertical: 16),
        child: Row(
          children: <Widget>[
            Container(
              height: 40,
              width: 40,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                color: kPrimaryColor,
                borderRadius: BorderRadius.circular(40),
              ),
              child: Text("${username.substring(0,1).toUpperCase()}"),
            ),
            SizedBox(width: 8,),
            Text(username),
          ],
        ),
      ),
    );
  }
}

下面是我的get函数,用于检索包含用户名的聊天:

 getChatRooms(String username)async{
    return await Firestore.instance.collection("ChatRoom").
    where("users", arrayContains: username).
    snapshots();

  }

共有2个答案

松献
2023-03-14
  return StreamBuilder(
      stream: chatRoomStream,
      builder: (context, snapshot) {
        return snapshot.hasData
            ? ListView.builder(
                itemCount: snapshot.data.docs.length,
                itemBuilder: (context, index) {
                  return ChatRoomTile(
                      **snapshot.data.docs[index].data()['chatRoomId']**);
                },
              )
            : Container();
      },
    );
越学义
2023-03-14

您收到的错误非常清楚问题是什么。QuerySnapshot没有文档属性。您可能打算使用文档属性,这与您尝试使用ListView更一致。

更改快照的实例。数据文档到快照。数据文档将解决此特定问题。

 类似资料:
  • 生成了以下NoSuchMethodError:类“QuerySnapshot”没有实例方法“Call”。接收方:“QuerySnapshot”实例尝试调用:call() 抛出异常时,这是堆栈:#0object.nosuchmethod(dart:core-patch/object_patch.dart:51:5)#1_HomeKitchenListState.build。(包:pigeon/coo

  • 我是从火神那里收取数据的,我有这个,我是火神的新手,我知道的不多,所以你能帮我吗? 错误是这样的:类'AsyncSnapshot'没有实例getter'docs'。接收器:'AsyncSnapshot'的实例尝试调用:docs

  • 我的代码中有两个流,第一个是从朋友列表中获取用户ID,第二个流是使用ID列表在Firebase中搜索用户ID的文档。 这是火力恢复代码。 我不知道为什么会发生这种情况,因为我可以显示id列表。我曾尝试将更改为,但也会产生相同的错误。 编辑:

  • 我正在遵循一个教程,试图创建一个水平的SingleChildScrollView,它包含带有产品描述的对象和带有两个小数的货币+价格标签。实现NumberFormat.Currency方法返回一个错误:NosuchMethodeRorr类“String”没有实例getter“is negal” 有人能帮助理解为什么它不拉“价格”价值吗?如果我对其进行硬编码,并为最终的双倍价格赋值=IE:29.90

  • 我下载了Flatter sdk,并将其放在/home/sony/flatter/bin中。我安装了vs代码,安装了Flatter和dart依赖项,并试图创建新项目,但我发现问题“找不到Flatter sdk。请确保安装了Flatter并且在您的路径中(您可能需要重新启动)。”我通过vs代码(/home/sony/flatter/bin)中的LOCATE sdk按钮显示了我的Flatter sdk的

  • 我最近开始使用Firebase fiRecovery,这是一个我似乎找不到答案的错误,我在查看类似问题的答案后尝试将snapshot.data.documents编写为文档、文档和文档,但它仍然抛出相同的错误。我该怎么办?我正在使用的fiRecovery版本是cloud_firestore:^1.0.7 它引发的异常