Значение присваивается списком, меняется на каждой итерации - PullRequest
0 голосов
/ 06 марта 2020

Это функция группировки событий по дням. Он начинается с List<EventK>, который содержит все элементы для сортировки. В результате получается Map<DateTime, List<EventK>>.

Проблема с currentDayEvents. Как только он назначен на _events, и значение currentDayEvents изменяется на разных итерациях, значение _events также изменяется. Как я могу получить постоянное значение _events вне функции?

void _getEvents()async{

    setState(() {
      isLoading = true;
    });

    List<EventK> events = await EventApi.getPersonalEvents();
    List<EventK> currentDayEvents = [];

    DateTime currentDay;

    for(int i = 0; i<events.length-1; i++){

      currentDay = events[i].startTime;
      currentDayEvents.add(events[i]);

      for(int j=i+1; j<events.length; j++){

        DateTime analyzedDay = events[j].startTime;

        if(currentDay.year == analyzedDay.year &&
            currentDay.month == analyzedDay.month &&
            currentDay.day == analyzedDay.day
        ){
          currentDayEvents.add(events[j]);
          events.removeAt(j);
          j -= 1;
        }

      }

      _events.putIfAbsent(currentDay, ()=>currentDayEvents);
      currentDayEvents.clear();

    }

    setState(() {
      isLoading = false;
    });
  }

1 Ответ

2 голосов
/ 06 марта 2020

Переместите объявление currentDayEvents внутри for-l oop, чтобы повторно инициализировать новый объект на каждой итерации. При этом вы можете удалить currentDayEvents.clear().

for(int i = 0; i<events.length-1; i++){

  currentDay = events[i].startTime;
  var currentDayEvents = [events[i]];

  for(int j=i+1; j<events.length; j++){

    DateTime analyzedDay = events[j].startTime;

    if(currentDay.year == analyzedDay.year &&
        currentDay.month == analyzedDay.month &&
        currentDay.day == analyzedDay.day
    ){
      currentDayEvents.add(events[j]);
      events.removeAt(j);
      j -= 1;
    }

  }

  _events.putIfAbsent(currentDay, ()=>currentDayEvents);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...