getCategorizedList<T extends NUITimeListItem> static method
List<NUITimeListItem>
getCategorizedList<T extends NUITimeListItem>({
- required List<
T> data, - Sort sort = Sort.ASCENDING,
- required ListCategorizationHeaderGetter<
NUITimeListItem> getHeader, - T? prevLastSortedData,
Implementation
static List<NUITimeListItem> getCategorizedList<T extends NUITimeListItem>({required List<T> data, Sort sort = Sort.ASCENDING, required ListCategorizationHeaderGetter getHeader, T? prevLastSortedData}){
final dateSortHash = Map<String, T>(); //Store added header titles
final dateHash = Map<String, List<T>>(); //Store categorized list
for(T e in data){
if(dateHash.containsKey(e.getHeaderId())){
final innerList = dateHash[e.getHeaderId()]!;
innerList.add(e);
dateHash[e.getHeaderId()] = innerList;
}
else{
final innerList = <T>[];
innerList.add(e);
dateHash[e.getHeaderId()] = innerList;
dateSortHash[e.getHeaderId()] = e;
}
}
final sortedTitleList = <NUITimeListItem>[];
sortedTitleList.addAll(dateSortHash.values);
if(sort == Sort.ASCENDING) {
sortedTitleList.sort((first, second) => first.getHeaderWeight().compareTo(second.getHeaderWeight()));
}
else {
sortedTitleList.sort((first, second) => second.getHeaderWeight().compareTo(first.getHeaderWeight()));
}
final sortedList = <T>[];
for(NUITimeListItem v in sortedTitleList){
final innerListGeneral = <NUITimeListItem>[];
final innerList = dateHash[v.getHeaderId()]!;
if(!isNullOrEmpty(innerList)){
if(sort == Sort.ASCENDING) {
innerList.sort((first, second) => first.getHeaderWeight().compareTo(second.getHeaderWeight()));
}
else {
innerList.sort((first, second) => second.getHeaderWeight().compareTo(first.getHeaderWeight()));
}
if(prevLastSortedData == null){
innerListGeneral.insert(0, getHeader(v)); //Insert targeted header here as title
}
else{
if(!prevLastSortedData.getHeaderId().match(v.getHeaderId())){ //This header not added previously, so add
innerListGeneral.insert(0, getHeader(v)); //Insert targeted header here as title
}
}
innerListGeneral.addAll(innerList);
sortedList.addAll(innerListGeneral as Iterable<T>); //Add remaining list items
}
}
return sortedList;
}