我正在从firebase实时数据库中获取一个特定的数据集,并尝试返回映射的单个值。它可以在地图中打印变量,但我不能返回它。
在这种情况下,函数get_Name应该返回值"Michael“。
实时数据库结构:
组
粉末冶金-MdXLzrGo4qIGO67ujNM
粉末冶金-MdXT0oysMDxqFQ5KurB
粉末冶金-Me4Kpz1He0v1QuH2e7Z
中转站:“……”
/T1587-1993中高级工业产品
void initState() {
test = get_Name("-Me4Kpz1He0v1QuH2e7Z");
print(test);
super.initState();
}
get_Name(String GroupID){
var Name;
DatabaseReference db;
db = FirebaseDatabase.instance.reference().child("group");
db.orderByKey().equalTo(GroupID).once().then((DataSnapshot snapshot){
Map<dynamic, dynamic> DB_value = snapshot.value;
DB_value.forEach((key,values) {
Name =values["castName"];
print(Name); // prints "Michael"
});
});
return Name; //returns "NULL"
}提前感谢
伯恩哈德
发布于 2021-07-08 15:24:22
当前代码的问题是缺少这样一种理解,即.then()将在您返回Name之后异步执行。
尝试将方法重写为这样的方法,我们将该方法标记为async,它允许我们使用await而不是使用.then(),这使得代码更容易理解:
Future<String> get_Name(String GroupID) async {
String name;
final db = FirebaseDatabase.instance.reference().child("group");
final snapshot = await db.orderByKey().equalTo(GroupID).once();
Map<dynamic, dynamic> DB_value = snapshot.value;
DB_value.forEach((key, values) {
name = values["castName"] as String;
print(name); // prints "Michael"
});
return name; //returns "NULL"
}该方法的返回值是Future<String> ( async标记的方法需要Future),以指示调用get_Name的方法也需要await答案,因为所有内容都将异步执行。
发布于 2021-07-08 15:19:42
从然后的块内部返回应该可以做到这一点。
get_Name(String GroupID){
var Name;
DatabaseReference db;
db = FirebaseDatabase.instance.reference().child("group");
db.orderByKey().equalTo(GroupID).once().then((DataSnapshot snapshot){
Map<dynamic, dynamic> DB_value = snapshot.value;
DB_value.forEach((key,values) {
Name =values["castName"];
print(Name); // prints "Michael"
});
return Name;
});
}但是,您也要在循环中多次指定名称。这是故意的吗?否则,您应该使用数组来推送其中的所有项。
https://stackoverflow.com/questions/68304280
复制相似问题