排序列表颤动

Posted

技术标签:

【中文标题】排序列表颤动【英文标题】:Sort list flutter 【发布时间】:2021-01-09 10:59:15 【问题描述】:

我正在寻找一种最简单的方法来根据给定值对列表进行排序,而不是使用两个列表。

例如我有列表[a,b,c,d],给定值d,我可以这样排序:

但是如果我有一个对象列表,我该如何根据给定的值对其进行排序?

示例

List<ABC> list = [fid:1,name:"a",fid:2,name:"b",fid:3,name:"c",fid:4,name:"d"]

我的值为 3。我想将列表排序为

List<ABC> list = [fid:3,name:"c",fid:1,name:"A",fid:2,name:"b",fid:4,name:"d",fid:4,name:"d"]

【问题讨论】:

那么您想要什么样的排序顺序?您发布的两个列表是完全不同的列表 @pskink 我想根据给定的fid对其进行排序。 你已经得到了答案:list.sort((a,b)=&gt; a["fid"].compareTo(b["fid"])); 【参考方案1】:

您可以使用比较器对列表进行排序:

const list = [fid:1,name:"a",fid:2,name:"b",fid:3,name:"c",fid:4,name:"d"]
const fixedFid = 3

const sortedList = list.sort( (item1, item2) =>  
    if (item1.fid === fixedFid)
        return -1
    
    if (item2.fid == fixedFid)
        return 1
    
    return item1.fid.localeCompare(item2.fid)
)

【讨论】:

但是如果我只给一个fid呢? @JohnJoe 您可以创建自定义比较器并根据您的字段定义规则,因此您可以使用 fid 而不是使用 name 属性,我更新了代码【参考方案2】:

您只需要在此处执行自定义排序,其余的将保持不变。

  List list = ["fid":1,"name":"z","fid":10,"name":"b","fid":5,"name":"c","fid":4,"name":"d"];
  
  list.sort((a,b)=> a["fid"].compareTo(b["fid"]));
  
  int fidIndex=4;
  
  int indexToRemove=list.indexWhere((element) => element["fid"]==fidIndex);

  Map<String,dynamic> removedItem= list.removeAt(indexToRemove);

  list.insert(0,removedItem); 

  print(list);

【讨论】:

但是如果我只给一个fid呢?

以上是关于排序列表颤动的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在颤动的可重新排序的列表视图中禁用对单个项目的重新排序?

按字母顺序排序列表

颤动 - 如何在颤动中保存状态选择的单选按钮列表?

如何遍历地图列表并在颤动列表视图中显示文本小部件?

无法在颤动中正确显示列表

从颤动的其他对象列表中删除对象列表