我想创建一个小部件,该小部件将基于地图上的循环生成多个CheckboxListTiles。每个条目的键是ProfessionalService,其值是布尔值(表示是否选中此框)。 ProfessionalIdentityModel拥有ProfessinalService的列表。我想遍历地图以创建多个CheckBoxTiles。
我的代码如下:
Widget serviceTile(ProfessionalIdentityModel professionalIdentityModel) {
Map boolServiceMap = {
for (var service
in professionalIdentityModel.professionalServices.services)
service: false
};
return Column(
children: <Widget>[
boolServiceMap.forEach((service, boolean) {
CheckboxListTile(
title: Text(service.name),
value: false,
onChanged: (bool value) {
setState(() {
service[boolean] = value;
});
},
);
})
],
);
} 我想根据我的ProfessionalService列表创建地图。必须在返回我的小部件之前完成。问题是仅填充了1个CheckBoxTiles,因为我的地图仅包含1个元素。您能找到我的地图包含所有元素的解决方案吗?
你能帮我吗?非常感谢。
答案 0 :(得分:0)
Map
需要具有唯一键,如果您所有的services
具有相同的对象,则所有键都将相等且不是唯一。
每次要添加条目时,新键都将与最后一个键相同。当Google Maps收到的键等于他们已经拥有的另一个键时,它们只会覆盖该键的值,这就是为什么您的Map
仅包含一项的原因。
您正在做的事情是这样的:
Map myMap = { 'myInt': 1 };
myMap['myInt'] = 2;
myMap['myInt'] = 3;
myMap['myInt'] = 4;
最后myMap
只有一个条目:'myInt': 4
。
Map
起作用的唯一方法是,如果所有服务都是不同的对象。
一开始很难理解这一点,因为您没有发布服务的类型以及服务的构建方式,所以我认为它们都是不同的,因为通常我们不会多次创建相同的服务,但是做不同事情的不同服务(单一责任原则)。