Json 通过firebase节点的颤振循环,该节点由单节点和带子节点的节点组成

Json 通过firebase节点的颤振循环,该节点由单节点和带子节点的节点组成,json,firebase,dart,flutter,Json,Firebase,Dart,Flutter,我有一段代码: routineExersiceIDsetter() async{ String routineId; final response = await reference.child(_userId).once(); response.value.forEach((k,v){ if(v["name"] == "First Routine"){ currentRoutineId = k; routineI

我有一段代码:

  routineExersiceIDsetter() async{
    String routineId;
     final response = await reference.child(_userId).once();
     response.value.forEach((k,v){
       if(v["name"] == "First Routine"){
         currentRoutineId = k;
         routineId = k;
       }
     });
     final response2 = await reference.child(_userId).child(currentRoutineId).once();
     response2.value.forEach((k, v){
         if(v["name"] == "Day 1"){
           currentSchemeId = k;
       }

     });
  }
这是firebase数据库的一部分

{
  "-LBNflaqFEb4DtZiYxnh" : {
    "-LBWa99g4yCstUBkDGa7" : {
      "name" : "Day 1"
    },
    "name" : "First Routine"
  }
}

第一条forEach行可以工作,但第二条不行。有没有办法让这项工作正常进行,或者我是否需要更改我的firebase体系结构?

我意识到应该将第二个ifstatement包装到另一个ifstatement中:

if(k!="name"){
   if(v["name"] == "Day 1"){
     currentSchemeId =k;
   }
}

你不需要把这两个请求连在一起吗?对Firebase的查询是异步的,因此您应该等待第一个查询解析为currentRoutineId值,然后才能执行第二个查询。我不知道如何在dart中链接它,因此我无法帮助您提供完整的解决方案。@RenaudTarnec我想我已经在等待请求中这样做了。我得到的结果是:类型“String”不是“index”的类型“int”的子类型,我不知道dart,但我感觉您没有链接这两个
wait
s。您确定
currentRoutineId
在第二个'wait'中的值正确吗?你能用控制台或日志检查吗?@RenaudTarnec从我看到的情况来看,它得到了正确的routineid,但在第二个foreach中仍然给出了一个错误。你到底想做什么?因为似乎所有的信息都在一个节点下