Как перебрать список, чтобы создать карту перед возвратом виджета? Флаттер - Дартс - PullRequest
0 голосов
/ 01 апреля 2020


Я хочу создать виджет, который будет генерировать несколько CheckboxListTiles на основе al oop на карте. Ключом каждой записи является 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 голосов
/ 01 апреля 2020

A Map должен иметь уникальные ключи, если все ваши services имеют одинаковый объект, все ключи будут равны и не уникальны.

Каждый раз, когда вы хотите чтобы добавить запись, новый ключ будет таким же, как последний ключ. Когда Карты получают ключ, равный другому, который у них уже есть, они просто переопределяют значение этого ключа, и поэтому ваш Map имеет только один элемент.

То, что вы делаете, выглядит примерно так:

Map myMap = { 'myInt': 1 };

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

В конце myMap будет иметь только одну запись: 'myInt': 4.

Единственный способ, которым ваш Map мог бы работать, это если бы все ваши сервисы были разными объектами.

Сначала было трудно это понять, потому что вы не опубликовали тип своих служб и то, как они создаются, поэтому я предположил, что все они были разными, поскольку обычно мы не создаем один и тот же Сервис несколько раз, но разные Услуги, которые делают разные вещи (Принцип Единой Ответственности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...