Flutter 颤振与振动;Firebase:无法将数据从Firebase子集合获取到我的流中
我正在尝试从流中获取我的数据信息。由于某种原因,我做不到。它甚至没有打印出我的内部打印语句“print(“insidesnapshot”)” 请查看我的代码,并告诉我如何解决此问题。 我期待着听到你所有的意见和想法。提前谢谢你 终端信息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
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();