【问题标题】:Flutter firebase realtime database how to update multiple children?Flutter firebase实时数据库如何更新多个孩子?
【发布时间】:2019-06-19 17:27:55
【问题描述】:

我正在尝试更新多个子项:更新作业中的所有订单。在 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>'

我的结构是这样的:

【问题讨论】:

    标签: firebase firebase-realtime-database flutter


    【解决方案1】:

    这行得通:

    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】:

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

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

      Map<String,dynamic> childrenPathValueMap = {};
      
      childrenPathValueMap["users/${userId1}/name"] = "user value 1";
      childrenPathValueMap["users/${userId2}/name"] = "user value 2";
      
      FirebaseDatabase.instance.reference().update(childrenPathValueMap);
      

      【讨论】:

        【解决方案3】:

        在变量声明中不要使用Map map = {},尝试使用:

        Map<String, dynamic> map = {};
        

        【讨论】:

          猜你喜欢
          • 2017-04-14
          • 2021-10-19
          • 2018-11-18
          • 2021-08-15
          • 1970-01-01
          • 1970-01-01
          • 2019-11-02
          • 2019-07-04
          • 2021-12-06
          相关资源
          最近更新 更多