我有一个列表,当用户单击按钮时,我会在其中添加Map值。用户会看到3个按钮,每个按钮都有相同的questionId(例如3(,但每个按钮的answerValue不同。每次用户单击一个按钮,就会向列表中添加一个带有问题id和答案值的Map。如果用户点击了具有相同问题Id:的所有三个按钮,我的列表如下所示
{{questionId: 4, answerValue : 8}, {questionId: 4, answerValue : 7}, {questionId: 4, answerValue : 8}}
所以我现在面临的问题是我有重复的项目,你可以从上面看到。该列表并没有替换answerValue,而是随着用户单击按钮的次数增加而添加越来越多的项目。我想在这里实现的是,如果questionId相同,那么列表应该替换该项,而不是创建一个新的列表条目。我试着使用set((和stackoverflow中的其他答案,但大多数都只是针对一个列表项,我无法实现我想要的。检查以下代码:
//This generates a map
var map = new QuesNValues(questionId: widget.ques.questions[widget.index].question.questionOptions[i].questionId, questionOptionId: val).toJson();
// Output: {questionId: 4, questionOptionId: 9}
然后将此地图添加到列表中:
selectedQuesValuesList.add(map);
我试过对列表中的项目使用for语句,但我根本无法使其工作。我只需要列表来替换具有相同questionId的值,而不是创建新项目。
在将响应添加到列表之前,您可以清除它:
selectedQuesValuesList.removeWhere((m) => m.questionId == id);