颤振:如何分组两个或多个字段?

时间:2021-07-08 06:23:10

标签: flutter

如何使用 groupBy 中的 collection.dart 函数按两个字段对项目进行分组并返回一个模型类,不是一个字段,例如 int ?

如果我按一个字段分组,它工作正常,没有问题:

 Map<int, List<FooterItem>> _getGroups(List<FooterItem> items) {
    return groupBy(items, (FooterItem i) {
      return  i.groupId;
    });
  }

但是当我想从 result 返回一个模型类时,groupBy 不是对值进行分组。 在这里,我有一个 FooterItem 列表,其中包含它的组数据,以及如何使用 groupBy 通过 List<FooterItem>groupIdtitleGroup 分组并返回 FooterGroup 不内部:

class FooterItem {
  final int id;//item id
  final int groupId;
  final String title;//item title
  final String titleGroup;
...
}

Map<FooterGroup, List<FooterItem>> _getGroups(List<FooterItem> items) {
    return groupBy(items, (FooterItem i) {
      return FooterGroup(id: i.groupId, title: i.titleGroup);
    });
  }

1 个答案:

答案 0 :(得分:1)

我可以通过在模型类中扩展 Equatable 来解决问题,我想将其用作分组值和覆盖道具:

import 'package:equatable/equatable.dart';
class FooterGroup extends Equatable{
  final int id;
  final String title;

  FooterGroup({
    @required this.id,
    @required this.title,
  });

  @override
  List<Object> get props => [id,title];
}

因此不再看到组的重复值。所以

Map<FooterGroup, List<FooterItem>> _getGroups(List<FooterItem> items) {
    return groupBy(items, (FooterItem i) {
      return FooterGroup(id: i.groupId, title: i.titleGroup);
    });
  }

现在工作正常。