如何在返回小部件之前迭代列表以创建映射?长笛-飞镖




我想创建一个小部件,它将基于映射上的循环生成多个CheckboxListTiles。每个条目的键都是一个专业服务,其值是一个布尔值(表示是否选中该框(。专业身份模型拥有专业服务列表。我想在地图上迭代,以便创建多个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;
});
},
);
})
],
);

}我想根据我的专业服务列表创建我的地图。这必须在返回我的小部件之前完成。问题是只有1个CheckBoxTiles被填充,因为我的地图只包含1个元素。你能找到一个解决方案,让我的地图包含所有元素吗?

你能帮我吗?非常感谢。

一个Map需要有唯一的键,如果所有的services都有相同的对象,那么所有的键都是相等的,而不是唯一的。

每次要添加条目时,新的关键字将与上一个关键字相同。当"贴图"接收到一个与另一个相同的键时,它们只会覆盖该键的值,这就是为什么Map只有一个项的原因。

你正在做的事情是这样的:

Map myMap = { 'myInt': 1 };
myMap['myInt'] = 2;
myMap['myInt'] = 3;
myMap['myInt'] = 4;

最后,myMap将只有一个条目:'myInt': 4

Map工作的唯一方法是,如果所有服务都是不同的对象。

起初很难理解这一点,因为你没有发布你的服务类型以及它们是如何构建的,所以我认为它们都是不同的,因为通常我们不会多次创建同一个服务,而是创建不同的服务来做不同的事情(单一责任原则(。

最新更新