我无法从firebase数据库获取值。
我试图访问值的函数:
class chatPage extends StatefulWidget {
final String groupId, groupName, userName;
const chatPage(
{Key? key,
required this.groupId,
required this.groupName,
required this.userName})
: super(key: key);
@override
State<chatPage> createState() => _chatPageState();
}
class _chatPageState extends State<chatPage> {
String admin = "";
Stream<QuerySnapshot>? chats;
@override
void initstate() {
getChatandAdmin();
super.initState();
}
getChatandAdmin() {
DatabaseService().getChats(widget.groupId).then((val) {
setState(() {
chats = val;
});
});
DatabaseService().getGroupAdmin(widget.groupId).then((value) {
setState(() {
admin = value;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(
widget.groupName,
textAlign: TextAlign.center,
),
elevation: 0,
backgroundColor: Theme.of(context).primaryColor,
actions: [
IconButton(
onPressed: () {
nextScreen(
context,
GroupInfo(
groupId: widget.groupId,
adminName: admin,
groupName: widget.groupName));
},
icon: const Icon(Icons.info))
],
),
body: Center(child: Text(widget.groupId),),
);
}
}
在上面的代码中是主类,我试图将值从函数保存到代码中的以下变量。但在看到结果的同时,并没有为其显示价值。
这是数据库类,所有集合引用都在其中创建,并且还包含函数getchat()
和getgroupadmin()
。
我做错了什么?
数据库服务类:
class DatabaseService {
final String? uid;
DatabaseService({this.uid});
//refrences for collections
final CollectionReference userCollection =
FirebaseFirestore.instance.collection("users");
final CollectionReference groupCollection =
FirebaseFirestore.instance.collection("groups");
//saving userdata
Future savingUserData(String fullName, String email) async {
return await userCollection.doc(uid).set({
"fullName": fullName,
"email": email,
"groups": [],
"profilePic": "",
"uid": uid,
});
}
//getting user data
Future gettingUserData(String email) async {
QuerySnapshot snapshot =
await userCollection.where("email", isEqualTo: email).get();
return snapshot;
}
//get user groups
getUserGroups() async {
return userCollection.doc(uid).snapshots();
}
// creating a group
Future createGroup(String userName, String id, String groupName) async {
DocumentReference groupDocumentRefrence = await groupCollection.add({
"groupName": groupName,
"groupIcon": "",
"admin": "${id}_$userName",
"members": [],
"groupId": "",
"recentMessage": "",
"recentMessageSender": "",
});
//update the members
await groupDocumentRefrence.update({
"members": FieldValue.arrayUnion(["${uid}_$userName"]),
"groupId": groupDocumentRefrence.id,
});
DocumentReference userDocumentRefrence = userCollection.doc(uid);
return await userDocumentRefrence.update({
"groups":
FieldValue.arrayUnion(["${groupDocumentRefrence.id}_$groupName"])
});
}
//getting the chats
getChats(String groupId) async {
return groupCollection
.doc(groupId)
.collection("messages")
.orderBy("time")
.snapshots();
}
Future getGroupAdmin(String groupId) async {
DocumentReference d = groupCollection.doc(groupId);
DocumentSnapshot documentSnapshot = await d.get();
return documentSnapshot['admin'];
}
}
- 调用getGroupAdmin函数时不从数据库中取值**
1条答案
按热度按时间x8diyxa71#
问题是在从数据库加载数据之前调用getGroupAdmin()函数。您可以通过将对getGroupAdmin()函数的调用移动到initState()方法来修复此问题。
下面是更新后的代码: