如何解决对流中的对象列表进行排序,并将排序后的列表作为flutter中的流返回
我有用户列表。我需要根据性别对这些用户数据进行排序。性别 = { 0:'男',1:'女',2:'其他'}。
我希望日期的排序方式是先列出女性,然后是男性,然后是其他,即 {1,2}。
class User {
String id;
String name;
int gender;
User({
this.id,this.name,this.gender,})
factory users.fromMap(Map<String,dynamic> data,String documentId) {
if (data == null) {
return null;
}
return User(
...
);
}
Map<String,dynamic> toMap() => <String,dynamic>{
...
}
}
有没有办法根据上述条件对数据进行排序并再次返回流?
我从数据库收到的流如下:
Stream<List<User>> users =
database.usersStream();
现在,用户对象是否可以使用 rxdart 进行排序,或者还有其他方法吗? 以及如何做到这一点?
解决方法
您可以在 usersStream
方法中对列表进行排序。
尝试以下步骤。
1.在您的 User
类中实现 Comparable 并覆盖 compareTo
方法。
class User implements Comparable<User> {
String id;
String name;
int gender;
User({
this.id,this.name,this.gender,});
@override
String toString() {
return "User(id: $id,gender: $gender)";
}
@override
int compareTo(User other) {
if (gender == 1) {
return -1;
}
if (other.gender == 1) {
return 1;
}
return gender.compareTo(other.gender);
}
}
2.使用 usersStream
方法对 compareTo
中的列表进行排序。
Stream<List<User>> usersStream() async* {
//This is dummy data for users.
List<User> users = List.generate(20,(index) {
Random random = Random();
int gender = random.nextInt(3);
return User(id: index.toString(),gender: gender,name: "User $index");
});
//Sorting the list.
users.sort((User a,User b) {
return a.compareTo(b);
});
yield users;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。