Заполнение замороженной модели объектами из идентификаторов
Контекст, который
я использую
sembast
хранить модели в локальном хранилище. Логика здесь в том, что у каждого будет по 5 объектов. Вместо того, чтобы хранить целые объекты в объекте, я сохраняю идентификаторы этих объектов. Помните, что все и должны храниться в локальном хранилище в
sprint
а также
day
магазин соответственно.
Проблема Я хочу получить доступ к объектам из объекта, используя сохраненный
taskIds
. Вот почему я хочу заполнить объект
Task
объекты.
У меня есть замороженная модель, которая имеет следующую структуру:
@freezed
class Sprint with _$Sprint {
factory Sprint({
required String id,
required String title,
required DateTime startDateTime,
required List<String> dayIds,
}) = _Sprint;
factory Sprint.fromJson(Map<String, dynamic> json) =>
_$SprintFromJson(json);
}
и модель со структурой:
@freezed
class Day with _$Day {
factory Day({
required String id,
required DateTime dateTime,
}) = _Day;
factory Day.fromJson(Map<String, dynamic> json) =>
_$DayFromJson(json);
}
Подход, который я использую при загрузке модели представления
List<Day> days = []
Future<void> onModelReady() async {
for(final dayId in currentSprint.dayIds) {
days.add(await _dayController.fetchDayById(dayId))
}
}
// use `days` variable
Но я думаю, что он добавляет обильный код, который можно предотвратить, если есть метод для объекта, который можно вызвать в
onModelReady
метод.
Future<void> onModelReady() async {
await currentSprint.populateWithDays();
}
void useDays() {
for(final day in sprint.days) { // here `days` is different than `dayIds`
print(day.dateTime);
}
}
Я могу сделать это, изменив
Sprint
модель для хранения списка
Day
s объекты, связанные с in property, когда
populateWithDays
называется. Но я не хочу хранить
dayIds
а также
days
в том же объекте.