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