List 列表指定的值,在每次迭代时都会更改

List 列表指定的值,在每次迭代时都会更改,list,flutter,dart,List,Flutter,Dart,这是一个按日期对事件进行分组的功能。它以一个包含所有要排序的元素的列表开始。结果是一个映射 问题在于currentDayEvents。一旦分配给\u events,并且currentDayEvents的值在不同的迭代中更改,\u events的值也会更改。如何在函数外部获取事件的永久值 void _getEvents()async{ setState(() { isLoading = true; }); List<EventK> events

这是一个按日期对事件进行分组的功能。它以一个包含所有要排序的元素的
列表开始。结果是一个
映射

问题在于
currentDayEvents
。一旦分配给
\u events
,并且
currentDayEvents
的值在不同的迭代中更改,
\u 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;
    });
  }
void\u getEvents()异步{
设置状态(){
isLoading=true;
});
List events=wait EventApi.getPersonalEvents();
列出currentDayEvents=[];
日期时间当前日期;

for(int i=0;i在for循环中移动
currentDayEvents
的声明,以便在每次迭代中重新初始化新对象。这样,您可以删除
currentDayEvents.clear()


for(int i=0;i将
currentDayEvents
的声明移动到for循环中,以便在每次迭代中重新初始化新对象。这样,您可以删除
currentDayEvents.clear()

for(int i=0;i
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);
}