Flutter-从现有文档集合创建文档集合错误:path.isNotEmpty



请帮帮我,我是Firebase的新手,在尝试从现有集合ID创建集合时出现消息错误。

对话被创建,聊天室也被创建,但我有消息在大约10秒后出现和消失,似乎第二个功能没有等待第一个

结构如下:

  • 在"Conversations";收集
  • 正在获取该文档的ID
  • 在";聊天室";与具有相同ID的集合";对话">

以下是消息错误:

在构建chatPage时抛出了以下断言(dirty,state:_chatPageState#e5c15(:文档路径必须是非空字符串'package:cloud_firestore/src/collection_reference.dart':断言失败:第59行位置14:"path.isNotEmpty">

这是我的代码:

class chatPage extends StatefulWidget {
@override
_chatPageState createState() => _chatPageState();
static String conversationId = "";
}
final CollectionReference conversationRef =
FirebaseFirestore.instance.collection("Conversations");
Future<String> getConversationID() async {
//Initialize Conversations collection
final QuerySnapshot snapshot = await conversationRef.get();
String convId = "";
snapshot.docs.forEach((DocumentSnapshot doc) {
if (doc["NumTel_Parent"] == OTPScreen.numTelParent &&
doc["Rendu"] == "Null") {
_isConv = true;
print("Conversation already Exist");
convId = doc.id;
}
});
if (_isConv == false) {
print("Adding conversation ...");
await bambiDB().addConversation(OTPScreen.numTelParent, "Null", "Null");
snapshot.docs.forEach((DocumentSnapshot doc1) {
if (doc1["NumTel_Parent"] == OTPScreen.numTelParent &&
doc1["Rendu"] == "Null") {
_isConv = true;
print("Conversation created");
convId = doc1.id;
}
});
}
return convId;
}
createChatRoomMessageAuto() async {
final CollectionReference chatRoomRef = FirebaseFirestore.instance
.collection("ChatRoom")
.doc(chatPage.conversationId)
.collection("ChatRoomParent");
final QuerySnapshot snapshot = await chatRoomRef.get();
if (snapshot.docs.length == 0) {
chatRoomRef.add({
"Message": messageAuto1,
"DateMessage": DateTime.now(),
"Who": "Doctor"
}).then((_) {
print("auto1 created");
}).catchError((_) {
print("an error occured");
});
chatRoomRef.add({
"Message": messageAuto2,
"DateMessage": DateTime.now(),
"Who": "Doctor"
}).then((_) {
print("auto2 created");
}).catchError((_) {
print("an error occured");
});
chatRoomRef.add({
"Message": messageAuto3,
"DateMessage": DateTime.now(),
"Who": "Doctor"
}).then((_) {
print("auto3 created");
}).catchError((_) {
print("an error occured");
});
chatRoomRef.add({
"Message": messageAuto4,
"DateMessage": DateTime.now(),
"Who": "Doctor"
}).then((_) {
print("auto4 created");
}).catchError((_) {
print("an error occured");
});
} else {
print("Auto already created.");
}
}
void creatingChatRoom() async {
chatPage.conversationId = "";
chatPage.conversationId = await getConversationID();
createChatRoomMessageAuto();
setState(() {});
}
@override
void initState() {
// TODO: implement initState
super.initState();
creatingChatRoom();
}

欢迎来到SO!我很难完全理解代码。似乎缺少了一些,特别是_chatPageState()的完整定义。作为未来问题的提示,如果你能尽可能将代码简化为一个简化的示例,你通常会发现更容易得到回复。

我的第一个想法是:如果conversationId_chatPageState内部的值,而不是chatPage的静态属性,这行吗?

我的第二个想法是:如果像这样将两个异步函数链接起来,它能工作吗?

getConversationID().then((id) {
chatPage.conversationId = id;
createChatRoomMessageAuto();
});

如果后者有效,您可能根本不需要存储conversationId,因为您可以直接将其传递给像这样的createChatRoomMessageAuto函数

getConversationID().then((id) {
createChatRoomMessageAuto(id);
});

我玩简化版本,如果它有助于

感谢您的帮助,它现在可以工作了,事实上,我没有把所有的代码都放进去,很抱歉没有太清楚。