(Замирает) Как обновить объект внутри списка, который находится внутри другого списка?

#flutter #immutability #freezed #flutter-freezed

Вопрос:

У меня есть неизменяемый объект (Компания), который содержит список неизменяемых объектов (Отделов), содержащий список неизменяемых объектов (Сотрудник).

 @freezed
class Company with _$Company {
  factory Company({String? name, List<Department>? departments}) = _Company;
}

@freezed
class Department with _$Department {
  factory Department({String? name, List<Employee>? employees}) = _Department;
}

@freezed
class Employee with _$Employee {
  factory Employee({String? name, int? age}) = _Employee;
}
 

Мне нужно изменить имя конкретного сотрудника (реализация следующей функции)

 Company updateEmployeeName(Company company, int DepartmentIndex,int EmployeeIndex){
    ...
  }
 

Это мое решение, но мне интересно, есть ли более простой способ сделать это:

 Company updateEmployeeName(Company company, int DepartmentIndex,int EmployeeIndex){
        return company.copyWith(
        departments: company.departments!
          ..[departmentIndex] = company.departments![departmentIndex].copyWith(
              employees: company.departments![departmentIndex].employees!
                ..[employeeIndex] = company
                    .departments![departmentIndex].employees![employeeIndex]
                    .copyWith(name: 'Ali')));
      }
 

Комментарии:

1. тебе ведь тоже нужна компания, верно? в методе

2. @MiguelEscobarCalderon Да, обновлено!

3. Вы пробовали использовать deep copy? pub.dev/пакеты/замороженные#глубокое копирование И, возможно, с elementAt , чтобы получить элемент с правильным индексом. Не уверен, что это сработает, просто стоит попробовать 😀

4. Итераторы по-прежнему не поддерживаются в замороженных github.com/rrousselGit/freezed/issues/185