对流中的对象列表进行排序,并将 return 排序后的列表作为 flutter 中的流

Sort list of objects in a stream and return the sorted list as a stream in flutter

我有用户列表。我需要根据性别对这些用户数据进行排序。性别 = { 0: 'male', 1: 'female', 2: 'others'}.

我希望日期的排序方式是首先列出女性,然后是男性,然后是其他人,即 {1, 0, 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>{
    ...
  }
}

有没有办法根据上述条件对数据进行排序,再return一个stream?

我从数据库收到的流如下:

Stream<List<User>> users =
        database.usersStream();

现在,用户对象可以使用 rxdart 排序还是有其他方法? 以及如何做到这一点?

您可以在 usersStream 方法中对列表进行排序。

请尝试以下步骤。

1。在您的 User class 中实施 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。使用 compareTo 方法对 usersStream 中的列表进行排序。

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