如何在返回小部件之前遍历列表以创建地图?扑-飞镖

时间:2020-04-01 17:21:46

标签: flutter dart iterable


我想创建一个小部件,该小部件将基于地图上的循环生成多个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个元素。您能找到我的地图包含所有元素的解决方案吗?

你能帮我吗?非常感谢。

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起作用的唯一方法是,如果所有服务都是不同的对象。

一开始很难理解这一点,因为您没有发布服务的类型以及服务的构建方式,所以我认为它们都是不同的,因为通常我们不会多次创建相同的服务,但是做不同事情的不同服务(单一责任原则)。