Добавление значений в LinkedHashMap приводит к одинаковому значению для всех ключей - PullRequest
0 голосов
/ 09 января 2019

Я использую 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 голосов
/ 09 января 2019

Вы используете один и тот же список (answersList) каждый раз, когда устанавливаете запись на карте, поэтому этот список становится вспомогательным списком для всех значений на карте. Таким образом, каждое изменение, которое вы вносите в список ответов, будет реплицироваться на все значения на карте. Вы могли бы видеть это, если бы вы поместили оператор печати после answersList.clear (); линия, это напечатает вашу карту с идентификаторами, указывающими на пустые списки.

Чтобы это исправить, вам нужно создать копию списка ответов для каждого значения, которое будет помещено в карту:

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