I have a simple list like this
[{Name: Black},{Name: Redblack},{Name: Aedblack}]
I need to sort this by a-z and z-a
I have a simple list like this
[{Name: Black},{Name: Redblack},{Name: Aedblack}]
I need to sort this by a-z and z-a
Firstly you can create a map list like that
List<Map> myList = [
{ 'Name' : 'Black',},
{ 'Name' : 'Redblack'},
{ 'Name' : 'Aedblack'},
];
And then, you can access the value of this element and sort using built-in function.
myList.sort((a, b) => a["Name"].compareTo(b["Name"]));
And if you want to sort reverse, just add it to "-" like that;
myList.sort((a, b) => -a["Name"].compareTo(b["Name"]));
I assume that you have a ColorModel list like this:
import 'dart:convert';
List<ColorModel> colorModelFromJson(String str) => List<ColorModel>.from(json.decode(str).map((x) => ColorModel.fromJson(x)));
String colorModelToJson(List<ColorModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class ColorModel {
ColorModel({
this.name,
});
String name;
factory ColorModel.fromJson(Map<String, dynamic> json) => ColorModel(
name: json["Name"] == null ? null : json["Name"],
);
Map<String, dynamic> toJson() => {
"Name": name == null ? null : name,
};
}
And you generated your list with the following method:
void addList() {
modelList.add(ColorModel(name: "Black"));
modelList.add(ColorModel(name: "Redblack"));
modelList.add(ColorModel(name: "Aedblack"));
}
Now you can sort this list with:
void sortList() {
modelList.sort((a, b) => a.name.compareTo(b.name));
}
void main(List<String> args) {
var data = [{'Name': 'Black'},{'Name': 'Redblack'},{'Name': 'Aedblack'}];
var sorted = data.map((m) => m['Name']).toList()..sort();
var newData = List<Map<String,String>>.generate(data.length, (i) => {'Name': sorted[i]});
print(newData);
}
Another simple way:
data.sort((a,b) => a['Name'].compareTo(b['Name']));
Result:
[{Name: Aedblack}, {Name: Black}, {Name: Redblack}]
You can have your domain class implement the Comparable interface.
Here is a basic example for a class Person that would sort by age and then by name:
class Person implements Comparable {
final String name;
final int age;
Person({this.name, this.age});
@override
int compareTo(other) {
final ageDiff = age.compareTo(other.age);
return ageDiff != 0 ? ageDiff : name.compareTo(other.name);
}
@override
String toString() => '$name, $age years old';
}
import 'package:faker/faker.dart';
void main() {
print('BEFORE');
persons.forEach((person) => print(person));
persons.sort();
print('SORTED');
persons.forEach((person) => print(person));
print('REVERSED');
persons.reversed.forEach((person) => print(person));
}
class Person implements Comparable {
final String name;
final int age;
Person({this.name, this.age});
@override
int compareTo(other) {
final ageDiff = age.compareTo(other.age);
return ageDiff != 0 ? ageDiff : name.compareTo(other.name);
}
@override
String toString() => '$name, $age years old';
}
final faker = Faker();
final persons = List.generate(
12,
(index) => Person(
name: faker.person.name(),
age: 18 + faker.randomGenerator.integer(3),
),
);
Restarted application in 170ms.
BEFORE
Kaelyn Hoeger, 18 years old
Kayleigh Schuster, 19 years old
Mrs. Sabryna Hilpert, 18 years old
Abbigail D'Amore, 19 years old
Esta Yundt, 20 years old
Friedrich Lang, 20 years old
Herman Stokes, 19 years old
Elenora Bode, 20 years old
Ida Rodriguez, 18 years old
Mrs. Chandler Romaguera I, 19 years old
Madeline Kulas, 19 years old
Rozella Pacocha, 19 years old
SORTED
Ida Rodriguez, 18 years old
Kaelyn Hoeger, 18 years old
Mrs. Sabryna Hilpert, 18 years old
Abbigail D'Amore, 19 years old
Herman Stokes, 19 years old
Kayleigh Schuster, 19 years old
Madeline Kulas, 19 years old
Mrs. Chandler Romaguera I, 19 years old
Rozella Pacocha, 19 years old
Elenora Bode, 20 years old
Esta Yundt, 20 years old
Friedrich Lang, 20 years old
REVERSED
Friedrich Lang, 20 years old
Esta Yundt, 20 years old
Elenora Bode, 20 years old
Rozella Pacocha, 19 years old
Mrs. Chandler Romaguera I, 19 years old
Madeline Kulas, 19 years old
Kayleigh Schuster, 19 years old
Herman Stokes, 19 years old
Abbigail D'Amore, 19 years old
Mrs. Sabryna Hilpert, 18 years old
Kaelyn Hoeger, 18 years old
Ida Rodriguez, 18 years old