返回映射的值



我从firebase实时数据库中获取一个特定的数据集,并尝试返回映射的单个值。它可以在地图上打印变量,但我无法返回。

在这种情况下,函数get_Name应该返回值"0";迈克尔;

实时数据库结构:


-MdXLzrGo4qIGO67ujNM
-MadXT0oysMDxqFQ5KurB
Me4Kpz1He0v1QuH2e7Z
castDate:">
castLocation:"quot
castName:"迈克尔

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"
}

提前感谢
伯恩哈德

当前代码的问题是缺少对.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作为答案,因为所有内容都将异步执行。

从then块内部返回就可以了。

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; 
});
}

但是,在循环中也要多次指定"名称"。这是有意的吗?否则,您应该使用数组来推送其中的所有项目。

最新更新