【问题标题】:Adding data from one List of Widgets to another List in Flutter在 Flutter 中将数据从一个小部件列表添加到另一个列表
【发布时间】: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)

标签: flutter dart


【解决方案1】:

这里的问题是,当您弹出一个页面时,上一个页面仍然具有以前的状态。因此,从所选列表中删除的任何内容仍将保留在旧页面上。你用的是什么状态管理系统?

【讨论】:

  • 我正在使用 seState。我认为这个问题与列表(workoutsObject)中对象的HashCode有关。每次我加载小部件时,都会在初始化状态下使用新的哈希码重新创建锻炼对象,因此当我将小部件与 selectedList 中的另一个小部件进行比较时,由于哈希码的差异,它不会识别出它们是相同的。有没有办法覆盖哈希码并使用不同的方法比较两个小部件?
  • 是的,flutter 不能很好地比较 2 个对象。 Equitable 是一个不错的比较包。它使用值相等而不是实例相等。
  • 这是否适用于这种情况:我想比较两个小部件而不是对象?
  • 那个,我不确定。我从来不用比较小部件。虽然,小部件是对象。
  • 好吧,实际上我有两个对象列表,我从屏幕 (a) 传递其中一个对象,最初它是空的。另一个是在屏幕 b 中创建的,它有一些对象。我想要做的是比较来自 b 的对象是否存在于 a 中,如果是,我删除它,如果没有,我添加它。除了当我从 b 弹出到 a 时,每件事都工作得很好。在弹出并再次导航到屏幕 b 后,列表 (a) 已通过并带有最近的更新,但是当我点击已经存在的对象时,删除它的方法不起作用但是,它在弹出之前就可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多