Flutter 颤振与振动;Firebase:无法将数据从Firebase子集合获取到我的流中

Flutter 颤振与振动;Firebase:无法将数据从Firebase子集合获取到我的流中,flutter,google-cloud-firestore,stream,state-management,Flutter,Google Cloud Firestore,Stream,State Management,我正在尝试从流中获取我的数据信息。由于某种原因,我做不到。它甚至没有打印出我的内部打印语句“print(“insidesnapshot”)” 请查看我的代码,并告诉我如何解决此问题。 我期待着听到你所有的意见和想法。提前谢谢你 终端信息 W/DynamiteModule( 3822): Local module descriptor class for providerinstaller not found. I/DynamiteModule( 3822): Considering local

我正在尝试从流中获取我的数据信息。由于某种原因,我做不到。它甚至没有打印出我的内部打印语句“print(“insidesnapshot”)”

请查看我的代码,并告诉我如何解决此问题。 我期待着听到你所有的意见和想法。提前谢谢你

终端信息

W/DynamiteModule( 3822): Local module descriptor class for providerinstaller not found.
I/DynamiteModule( 3822): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller( 3822): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
I/flutter ( 3822): Inside _messageList
模型

屏幕代码

return StreamBuilder<List<Conversation>>(
        stream: User_DatabaseService(uid: uid).chatroomMesssages,
        builder: (context, snapshot) {
          List<Conversation> messageList = snapshot.data ?? [];
          messageList.forEach((message) {
        print("${message.date} ${message.message} ${message.sendby}");
      });
//-----
}
返回StreamBuilder(
流:用户\数据库服务(uid:uid).ChatRoomMessages,
生成器:(上下文,快照){
List messageList=snapshot.data???[];
messageList.forEach((消息){
打印(${message.date}${message.message}${message.sendby}”);
});
//-----
}
数据库代码

    // collection reference
  final CollectionReference chatroomCollection =
      FirebaseFirestore.instance.collection('chatrooms');
// all conversation
      List<Conversation> _messageList(QuerySnapshot snapshot) {
        print("Inside _messageList");
    
        return snapshot.docs.map((doc) {
          print("Inside snapshot");
          final dataInfo = doc.data();
          print(dataInfo['date']);
          
          return Conversation(
            date: dataInfo['date'] ?? null,
            sendby: dataInfo['sendBy'] ?? null,
            message: dataInfo['message'] ?? null,
          );
        }).toList();
      }
    
      //Get all conversation
      Stream<List<Conversation>> get chatroomMesssages {
        //print('in allUserData');
        print("Inside getChatroomMesssages");
        return userCollection
            .doc('devil@yahoo.com_punreach@yahoo.com')
            .collection("chats")
            .snapshots()
            .map(_messageList);
      }
//集合引用
最终收藏参考聊天室收藏=
FirebaseFirestore.instance.collection('chattrooms');
//所有对话
列表\u消息列表(QuerySnapshot快照){
打印(“内部消息列表”);
返回snapshot.docs.map((doc){
打印(“内部快照”);
最终数据信息=单据数据();
打印(数据信息['date']);
回话(
日期:dataInfo['date']??空,
发送人:数据信息['sendby']??空,
消息:dataInfo['message']??空,
);
}).toList();
}
//获取所有对话
流获取聊天室消息{
//打印(“在allUserData中”);
打印(“GetChatRoomMessages内部”);
返回用户集合
博士('devil@yahoo.com_punreach@雅虎(yahoo.com)
.收藏(“聊天”)
.快照()
.map(_messageList);
}
火基

请阅读错误消息,它实际上提供了大量信息:

类型“对话”不是类型“列表”的子类型

请看这一行;如果
snapshot.data
为空,则您试图分配的对象类型错误:

List<Conversation> messageList = snapshot.data ?? Conversation();
List messageList=snapshot.data??Conversation();

编辑:请再次阅读实际错误消息

对null调用了方法“forEach”

现在,如果
snapshot.data
为null,则将
null
赋值给同一个变量,此处:
List messageList=snapshot.data??null;
,然后在其上调用
.forEach

没有“此集合不存在”Firebase中出错。您可以引用不存在的集合,但它们到达时为空。您可以引用不存在的集合,这是您首先创建它们的方式


这里的错误是您使用的是您的
userCollection
,它没有任何这些。在您的屏幕截图中,我们看到了
chattrooms
,因此您应该使用
chattroomscocollection
,它实际上包含了我们在屏幕截图中看到的数据。

哦,这只是我以前的代码。我更改了它。请看一看在一个新的上。是的,我理解。我分配了null。但这不是重点。如果它有一些值,它将从null变为某物。但是我没有,这就是重点。因为它是null,所以会引发异常。你应该为它分配一个空列表,或者根据你的设计要求,以不同的方式处理此类情况。我我真的不知道如何进一步解释。先生,我按照你说的做了更改。现在,我仍然无法将值输入到我的流中。那么你怎么解释呢?是否有任何错误或任何其他相关输出?什么是
userCollection
回答!我会告诉你我刚才说的话!很高兴能帮上忙。22小时后我会告诉你的。时间到了吗。
List<Conversation> messageList = snapshot.data ?? Conversation();