简体   繁体   中英

Sort list flutter

I'm looking for a simplest way to sort list based on given value instead of using two list.

Example I have list [a,b,c,d] , with a given value d ,I can sort it like this:

在此处输入图片说明

But if I have an object list, how can I sort it based on given value?

Example

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

I have value 3. I want to sort the list become

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

You just need to perform custom sorting here, rest of the things will remain same.

  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);

You can sort list using comparator:

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)
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM