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组中。
如何将来自同一地点的人(例如“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/