如何在另一个组列表 (groupby) 中实现组列表。是否可以在飞镖自定义中使用多个哈希码和运算符== object

How to implement group list inside another group list (groupby). Is it possible to use multiple hashcode and operator== in a dart custom object


class People  {
  final String id;
  final String title;
  final String name;
  final String location;
  final String email;
  final String lga;
 

  People({
    @required this.id,
    @required this.title,
    @required this.name,
    @required this.location,
    this.email,
    this.lga,
    
  });


  factory People.fromJson(Map<String, dynamic> json) => People(
    id: json["id"],
    title: json["title"],
    name: json["name"],
    location: json["location"],    
    email: json["email"],
    lga: json["lga"],
   

  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "title": title,
    "name": name,
    "location": location,    
    "email": email,
    "lga": lga,
   
  };


@override
  bool operator ==(o) =>
    o is Priest && townOrigin == o.townOrigin && lga == o.lga;

@override
  int get hashCode => town.hashcode ^ lga.hashcode;

这在 town 或 lga 之间的 listView 中是可能的,但我的问题是,我想在位置中实现这些 equals 和 hashCode,在另一个 ListView 中有所不同。

为了简单起见,很多人都在同一地点,但我只需要一个地点,来自同一地点的许多人(作为 header)在下面重复他们的名字。

有什么帮助吗?

[
  {
      "id": "1",
      "name": "Ada Kenneth Kenechukwu",
      "location": "Awka",
      "townOrigin": "Nimo",
      "phone": "080633",
       "lga": "Njikoka",
      
  },
{
      "id": "2",
      "name": "Ugo John",
      "location": "Awka",
      "townOrigin": "Nimo",
      "phone": "08057763",
      "lga": "Njikoka",
     
  },
{
      "id": "3",
      "name": "Okafor Kenneth Kenechukwu",
      "location": "Awka",
      "townOrigin": "Ukpo",
      "phone": "0806363",
      "lga": "Dunukofia",
      
  },
{
      "id": "4",
      "name": "Ndu Agi",
      "location": "Awka",
      "townOrigin": "Ukpo",
      "phone": "0806763",
      "lga": "Dunukofia",
     
  },
 {
      "id": "5",
      "name": "Mma Peter",
      "location": "Awka",
      "townOrigin": "Ichida",
      "phone": "08057763",
       "lga": "Anaocha",
      
  },
{
      "id": "6",
      "name": "Eze Peter",
      "location": "Awka",
      "townOrigin": "Ichida",
      "phone": "0806345",
       "lga": "Anaocha",
     
  }
] 

当你看这个的时候,有些地方有相同的位置,townOrigin,lga。我的应用程序中有三个 listView 页面,它将分别显示来自同一位置、townOrigin、lga 的所有那些(名称)。仅显示名称但使用一个元素(如位置中的 Awka)作为 subhead.The 同样适​​用于所有 townOrigin 和 lga。期待帮助。

我得到了更好的东西,但还没有解决我所有的问题, 使用此包 sticky_grouped_list、https://pub.dev/packages/sticky_grouped_list

我想要一个群中群。我得到了一组 lga,但仍在 lga 组中。

如何将像“Uga”这样来自同一地点的人合并为一个。

您可以尝试添加如下内容:

extension GroupingBy on Iterable<dynamic> {
  Map<String, List<dynamic>> groupingBy(String key){
    var result = <String, List<dynamic>>{};
    for(var element in this){
      result[element[key]] = (result[element[key]] ?? [])..add(element);
    }
    return result;
  }
}

这样您就可以按特定字段对数据元素进行分组。

首先,将您的数据放入列表中:

var people = [
      {
        "id": "1",
        "name": "Ada Kenneth Kenechukwu",
        "location": "Awka",
        "townOrigin": "Nimo",
        "phone": "080633",
        "lga": "Njikoka",
      },
      {
        "id": "2",
        "name": "Ugo John",
        "location": "Awka",
        "townOrigin": "Nimo",
        "phone": "08057763",
        "lga": "Njikoka",
      },
      {
        "id": "3",
        "name": "Okafor Kenneth Kenechukwu",
        "location": "Awka",
        "townOrigin": "Ukpo",
        "phone": "0806363",
        "lga": "Dunukofia",
      },
      {
        "id": "4",
        "name": "Ndu Agi",
        "location": "Awka",
        "townOrigin": "Ukpo",
        "phone": "0806763",
        "lga": "Dunukofia",
      },
      {
        "id": "5",
        "name": "Mma Peter",
        "location": "Awka",
        "townOrigin": "Ichida",
        "phone": "08057763",
        "lga": "Anaocha",
      },
      {
        "id": "6",
        "name": "Eze Peter",
        "location": "Awka",
        "townOrigin": "Ichida",
        "phone": "0806345",
        "lga": "Anaocha",
      },
      {
        "id": "7",
        "name": "New Person",
        "location": "Somewhere else",
        "townOrigin": "idk",
        "phone": "694201738",
        "lga": "Mystery",
      }
    ]; 

现在,如果您想按位置对它们进行分组,您可以像这样简单地进行操作:

var peopleByLocation = people.groupingBy('location');
var awka = peopleByLocation['Awka']; //List of all people with a 'location' : 'Awka'
var somewhereElse = peopleByLocation['Somewhere else'];

这是一个 link 在 dartpad 中稍作修改的版本,您可以使用它:https://dartpad.dev/8a53fc2eb4f63d904f414ea528574baf