如何在返回窗口小部件之前遍历列表以创建地图? Flutter-Dart

问题描述 投票:0回答:1

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

您能帮我吗?非常感谢。

flutter dart iterable
1个回答
0
投票

Map需要具有unique键,如果您所有的services都具有相同的对象,则所有键都将相等且不是唯一的。

每次您要添加条目,新键将与最后一个键相同。当Google Maps收到的键等于他们已经拥有的另一个键时,它们将覆盖该键的值,这就是Map只有一项的原因。

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

Map myMap = { 'myInt': 1 };

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

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

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

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


-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.