flutter - 如何在另一个组列表(groupby)中实现组列表。是否可以在dart自定义对象中使用多个哈希码和operator ==

标签 flutter dart group-by equals hashcode


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;
这在城镇或拉加河之间的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所在位置)作为副标题。这同样适用于所有townOrigin和lga。期待获得帮助。
我的状况有所好转,但尚未解决所有问题,
使用此软件包sticky_grouped_list,https://pub.dev/packages/sticky_grouped_list
我想要一个小组中的一个小组。我已经得到了一组LGA,但尚未放入LGA组中。
enter image description here
如何将来自同一地点的人(例如“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'];
以下是dartpad中经过稍微修改的版本的链接,您可以使用它:https://dartpad.dev/8a53fc2eb4f63d904f414ea528574baf

关于flutter - 如何在另一个组列表(groupby)中实现组列表。是否可以在dart自定义对象中使用多个哈希码和operator ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63763560/

相关文章:

android - 当从图像选择器打开相机时,应用程序 "Lost connection to device."

angularjs - 导入库不会仅导入文件包文件夹

sql - 按所选值将记录分组到不同的列中

php - MySQL 选择分组依据和排序依据

sqlite - 从 SQLITE 中的两列中选择不同的值

flutter 医生 : idevice_id returned an error

android - 使用 RTL 语言编辑文本时 Flutter 中的错误

flutter - 如何在 Flutter 中获取实时通知

dart - 当不指定返回类型时,dart 显示另一个函数内部的精确返回类型,但对于顶层是动态的

android - 尝试将音频 Assets 设置为 Android 上的铃声