我正在尝试更新多个子项:更新作业中的所有订单。在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>'
我的结构如下:
答案 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);