Firebase数据库的结构不正确

Firebase数据库的结构不正确,firebase,flutter,firebase-realtime-database,Firebase,Flutter,Firebase Realtime Database,我正在用Firebase数据库开发一个颤振应用程序。这是一个聊天应用程序。我需要的数据库结构如下所示 因此,我首先创建一个聊天室,然后添加其成员。这里请考虑密钥 900代码>代码>作为代码>聊天室< /代码>(我知道它不在本例中),在代码 节点中充当外键。根据当前的结构,我可以在聊天室中添加任意数量的成员,我可以轻松找到他们,而无需下载大量数据。这可以通过以下代码实现 消防数据库服务。dart import 'package:firebase_database/firebase_databas

我正在用Firebase数据库开发一个颤振应用程序。这是一个聊天应用程序。我需要的数据库结构如下所示

因此,我首先创建一个
聊天室
,然后添加其
成员
。这里请考虑密钥<代码> 900代码>代码>作为代码>聊天室< /代码>(我知道它不在本例中),在代码<成员> <代码>节点中充当外键。根据当前的结构,我可以在
聊天室中添加任意数量的
成员
,我可以轻松找到他们,而无需下载大量数据。这可以通过以下代码实现

消防数据库服务。dart

import 'package:firebase_database/firebase_database.dart';

class FireDatabaseService
{

  final DatabaseReference _chatRoomReference = FirebaseDatabase.instance.reference().child('chat_room');

  //Create chat_room
  Future<String> createChatRoom({String lastMessage, String chatMode}) async {
    
    var newChatRoomRef = _chatRoomReference.push();
    var newChatRoomKey = newChatRoomRef.key;
    await newChatRoomRef.set({
      'last_message': lastMessage,
      'chat_mode': chatMode,
      'timestamp': DateTime.now().millisecondsSinceEpoch,
      
    });

    return newChatRoomKey;
  }

  Future<void> addChatMembers(List<ChatMember> chatMembers, String chatRoomID) async
  {
    for(int i=0; i<chatMembers.length; i++)
    {
      ChatMember chatMemeber = chatMembers[i];

      var newChatMemberReference = FirebaseDatabase.instance.reference().child('members/$chatRoomID/').push();
      var newChatMemberKey = newChatMemberReference.key;
     await newChatMemberReference.set({
      'email': chatMemeber.email,
      'userID': chatMemeber.userID,
      'user_role': chatMemeber.userRole,
      
    });
    }
    return null;
  }

}
void initState() {
    super.initState();

    FireDatabaseService firebaseDatabase = FireDatabaseService();
    String chatRoomID="";

    firebaseDatabase.createChatRoom(
    lastMessage: "Test",
    chatMode: "Supplier").then((value)  async{
      print("CHAT ID: "+value);


      ChatMember member1 = new ChatMember(
      email: "someone@test.com",
      userRole: "customer",
      userID: 30
    );

    ChatMember member2 = new ChatMember(
      email: "anotherone@test.com",
      userRole: "supplier",
      userID: 50
    );

    List<ChatMember> chatMemberList = [member1, member2];

    print("BEFORE");
    await firebaseDatabase.addChatMembers(chatMemberList, "900");
    print("AFTER");
    });

    
  }
import'包:firebase_数据库/firebase_数据库.dart';
类FireDatabaseService
{
final DatabaseReference\u chatRoomReference=FirebaseDatabase.instance.reference().child('chat\u room');
//创建聊天室
Future createChatRoom({String lastMessage,String chatMode})异步{
var newChatRoomRef=_chatRoomReference.push();
var newChatRoomKey=newChatRoomRef.key;
等待新聊天室参考设置({
“最后一条消息”:最后一条消息,
“聊天模式”:聊天模式,
“时间戳”:DateTime.now().millissecondssinceepoch,
});
返回新的聊天室密钥;
}
未来addChatMembers(列出chatMembers,字符串chatRoomID)异步
{

对于(int i=0;i我修复了这个问题。这是因为
聊天室ID
没有获取唯一密钥,它是空的。我用以下方法修复了它

void initState() {
    super.initState();

    FireDatabaseService firebaseDatabase = FireDatabaseService();

    firebaseDatabase
        .createChatRoom(lastMessage: "Test", chatMode: "Supplier")
        .then((value) async {
      print("CHAT ID: " + value);

      ChatMember member1 = new ChatMember(
          email: "someone@test.com",
          userRole: "customer",
          userID: 30,
          profilePic: "");

      ChatMember member2 = new ChatMember(
          email: "anotherone@test.com", userRole: "supplier", userID: 50);

      List<ChatMember> chatMemberList = [member1, member2];

      print("BEFORE");
      await firebaseDatabase.addChatMembers(chatMemberList, value);
      print("AFTER");
    });
  }
void initState(){
super.initState();
FireDatabaseService firebaseDatabase=FireDatabaseService();
firebaseDatabase
.createChatRoom(最后一条消息:“测试”,聊天模式:“供应商”)
.then((值)异步{
打印(“聊天ID:+值”);
ChatMember member1=新ChatMember(
电子邮件:“someone@test.com",
用户角色:“客户”,
用户ID:30,
profilePic:”;
ChatMember member2=新ChatMember(
电子邮件:“anotherone@test.com,用户角色:“供应商”,用户ID:50);
List chatMemberList=[member1,member2];
打印(“之前”);
等待firebaseDatabase.addChatMembers(chatMemberList,值);
打印(“之后”);
});
}