Заполнение замороженной модели объектами из идентификаторов

Контекст, который
я использую 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 модель для хранения списка Days объекты, связанные с in property, когда populateWithDaysназывается. Но я не хочу хранить dayIds а также days в том же объекте.

0 ответов

Другие вопросы по тегам