#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