Flutter Firebase实时数据库如何更新多个子级?

时间:2019-01-25 21:02:23

标签: firebase firebase-realtime-database flutter

我正在尝试更新多个子项:更新作业中的所有订单。在Android中,我可以这样做:

public void setJobOrder(final ArrayList<Job> jobs) {
  Map map = new HashMap();
  for (int i = 0; i < jobs.size(); i++) {
    map.put(jobs.get(i).id + "/order", i + 1);
  }
  jobsRef.updateChildren(map);
}

在扑朔迷离中,我想到了这样的东西:

Future setJobOrder(List<Job> jobs) async{
  Map map = {};

  for(int i = 0; i<jobs.length; i++){
    map[jobs[i].id] = {'order': i};
  }

  return (await _getJobsRef()).update(map);
}

但是,这给了我以下错误:

E/flutter ( 8693): type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'

我的结构如下:

enter image description here

3 个答案:

答案 0 :(得分:0)

代替变量声明上的Map map = {},请尝试使用:

Map<String, dynamic> map = {};

答案 1 :(得分:0)

这有效:

Future setJobOrder(List<Job> jobs) async{
  Map map = {};
  for(int i = 0; i<jobs.length; i++){
    map[jobs[i].id + '/order'] = i;
  }

  return (await _getJobsRef()).update(map.cast<String, dynamic>());
}

答案 2 :(得分:0)

创建键为路径和值的地图 然后使用update方法更新子级

例如,如果我们要更新两个用户的名称,则为每个用户传递路径和值,然后更新到主引用

Map<String,dynamic> childrenPathValueMap = {};

childrenPathValueMap["users/${userId1}/name"] = "user value 1";
childrenPathValueMap["users/${userId2}/name"] = "user value 2";

FirebaseDatabase.instance.reference().update(childrenPathValueMap);