如何在保留顺序并用dart返回列表的同时删除列表中重复的构造对象?

时间:2019-07-03 05:07:47

标签: list flutter dart

我有一个名为“ RecentCard”的构造对象列表,该对象基本上是具有用户ID,图片和名称的对象。我已经创建了一个列表,该列表根据时间戳以最近交互的顺序排列。但是,我需要摆脱第二次出现以及任何重复对象的发生。我只比较id,因为用户可能具有相同的名称或照片,并且我无法从简单的uid列表中删除重复项,因为那样我可能会丢失相应照片和名称的顺序。

例如,列表看起来像这样:

List<RecentCard> recentCards= [RecentCard(uid:as721dn18j2,name:mike,photourl:https://sadadasd1d1),RecentCard(.....]

我已经搜索了解决方案,但是所有这些解决方案都在处理像简单的字符串列表之类的原始类型,而这些解决方案对我不起作用。例如,该帖子:How to delete duplicates in a dart List? list.distinct()?阅读以下内容

第一个答案的链接不再可用,带有集的下一个答案是我尝试过的东西,但是它根本无法正常工作,我不知道为什么可能不是它的原始类型。查询包的下一个答案不起作用,因为我正在使用列表构建listview.builder,因此当我调用list.length时,它说我无法在可迭代对象上调用它。最终的解决方案将不起作用,因为它说String不是LatestCard的子类型。

我尝试使用两个forloop,第二个只是将第一个值与下一个对进行比较,但这不起作用,因为如果找到重复项,则该对象将被删除并且长度被弄乱,因此某些元素将被跳过。

有什么想法吗?我觉得它非常简单,但是我不确定该怎么做。

1 个答案:

答案 0 :(得分:1)

您必须使用Set存储看到的卡片,然后过滤掉集合中已经存在的卡片。

final seenCards = Set<String>();
final uniqueCards = recentCards.where((card) => seenCards.add(card.uid)).toList();