【发布时间】:2021-03-30 17:34:34
【问题描述】:
所以我有一个小部件 (a),其中包含一个动画列表和一个空的小部件列表 (SelectedWorkoutsList)。然后在点击列表中的任何小部件后,我导航到另一个小部件 (b) 并使用 Navigator 传递仍然为空的 SelectedWorkoutsList。同时在小部件 (b) 中,我有仍然为空的 SelectedWorkoutsList) 和另一个包含小部件的 List(WorkoutObjects)。选择其任何小部件后,应将小部件添加到从小部件 (a) 传递的 SelectedWorkoutsList 中,如果用户再次点击同一小部件,则应将其删除。所有这一切都完美无缺,我的问题是在添加小部件并弹出回第一个小部件(a)然后导航到(b)我仍然有那个 SelectedWorkoutsList 但是如果我选择一个在弹出之前我已经选择的小部件,它会将其添加为副本,而应将其删除。
我正在使用这个 if 条件来检查该小部件是否已被选中。
onTap: () {
if(!selectedWorkoutsList.contains(workoutObjects[index])) {
selectedWorkoutsList.add(workoutObjects[index]);
}else{
selectedWorkoutsList.remove(workoutObjects[index]);
}
print(selectedWorkoutsList.length);
},
所以我有一个包含小部件和 onTap 的锻炼对象列表,我检查 selectedWorkoutsList 是否包含用户从锻炼对象中点击的小部件,是的,它被删除了,不是它被添加了。它工作正常,除非我弹回然后再次导航。
我正在使用 seState。我认为问题与列表(workoutsObject)中对象的HashCode有关。每次我加载小部件时,都会在初始化状态下使用新的哈希码重新创建锻炼对象,因此当我将小部件与 selectedList 中的另一个小部件进行比较时,由于哈希码的差异,它不会识别出它们是相同的。有没有办法覆盖哈希码并使用不同的方法比较两个小部件?
【问题讨论】:
-
发布页面内容(A & B)