将值添加到LinkedHashMap会导致所有键的值相同

时间:2019-01-09 05:47:23

标签: dart flutter linkedhashmap

我正在使用LinkedHashMap将数组添加到不同的键,如下所示:

nextQ(String qid) {
print(answersList);
print(qid);
setState(() {
  answers[qid] = answersList;
});
print(answers);
_swipeAnimation();
answersList.clear();
}


clicked(String quesid, String id) {
setState(() {
  if (!answersList.contains(id)){
    answersList.add(id);
  }
  qid = quesid;
});
}

第一次调用nextQ我得到:

  

answersList = [5c2c9b21108d3d04531494a7,5c2c9b21108d3d04531494a6]

     

和答案= {5c2c9b21108d3d04531494a4:   [5c2c9b21108d3d04531494a7,5c2c9b21108d3d04531494a6]}

这是正确的。第二次被称为:

  

answersList = [5c2c9b21108d3d04531494a2 ..这是正确的

答案是:

  

answers = {5c2c9b21108d3d04531494a4:[5c2c9b21108d3d04531494a2],   5c2c9b21108d3d04531494a1:[5c2c9b21108d3d04531494a2]}

这是错误的。 为什么为地图中的所有键都设置了最后一个answersList值?

1 个答案:

答案 0 :(得分:0)

每次在地图中设置条目时,您都会使用相同的列表(answersList),因此此列表将成为地图中所有值的后备列表。因此,您对AnswersList所做的每次更改都会复制到地图中的所有值。如果在answerList.clear();之后放置打印语句,则可以看到此内容。行,这会打印出带有指向空列表的ID的地图。

要解决此问题,您需要为要放入地图中的每个值创建AnswersList的副本:

answers[qid] = List.from(answersList);