首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回映射的值

返回映射的值
EN

Stack Overflow用户
提问于 2021-07-08 15:12:15
回答 2查看 216关注 0票数 0

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

在这种情况下,函数get_Name应该返回值"Michael“。

实时数据库结构:

粉末冶金-MdXLzrGo4qIGO67ujNM

粉末冶金-MdXT0oysMDxqFQ5KurB

粉末冶金-Me4Kpz1He0v1QuH2e7Z

中转站:“……”

 /T1587-1993中高级工业产品

代码语言:javascript
复制
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"
  }

提前感谢

伯恩哈德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-08 15:24:22

当前代码的问题是缺少这样一种理解,即.then()将在您返回Name之后异步执行。

尝试将方法重写为这样的方法,我们将该方法标记为async,它允许我们使用await而不是使用.then(),这使得代码更容易理解:

代码语言:javascript
复制
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答案,因为所有内容都将异步执行。

票数 1
EN

Stack Overflow用户

发布于 2021-07-08 15:19:42

从然后的块内部返回应该可以做到这一点。

代码语言:javascript
复制
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; 
    });
  }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68304280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档