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

How to iterate over a list to create a map before returning a widget? Flutter - Dart


我想创建一个小部件,该小部件将基于地图上的循环生成多个 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;
          });
        },
      );
    })
  ],
);

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

你能帮帮我吗?非常感谢。

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

每次您要添加条目时,新密钥将与上一个密钥相同。当 Maps 接收到的键等于他们已有的另一个键时,它们只会覆盖该键的值,这就是为什么您的 Map 只有一个项目。

你正在做的是这样的:

Map myMap = { 'myInt': 1 };

myMap['myInt'] = 2;
myMap['myInt'] = 3;
myMap['myInt'] = 4;

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

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

一开始很难理解这一点,因为您 post 不知道您的服务类型以及它们是如何构建的,所以我假设它们都是不同的,因为通常我们不会创建同一个服务多次,但不同的服务做不同的事情(单一职责原则)。