コンテキストモデルをローカル ストレージに保存するため
に使用しています。sembast
ここでのロジックは、すべてSprint
に 5 つDay
のオブジェクトがあるということです。オブジェクト全体をオブジェクトに格納する代わりにSprint
、それらのオブジェクトの ID を格納していDay
ます。すべてSprint
とDay
は、それぞれローカル ストレージのsprint
とday
ストアに格納されることに注意してください。
問題stored を使用して objectTask
からオブジェクト
にアクセスしたい。そのため、オブジェクトにオブジェクトを設定したいと考えています。Sprint
taskIds
Sprint
Task
Sprint
次の構造を持つ凍結モデルがあります。
@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);
}
およびDay
構造を持つモデル:
@freezed
class Day with _$Day {
factory Day({
required String id,
required DateTime dateTime,
}) = _Day;
factory Day.fromJson(Map<String, dynamic> json) =>
_$DayFromJson(json);
}
days
ビューモデルのロード時に変数を使用しているアプローチ
List<Day> days = []
Future<void> onModelReady() async {
for(final dayId in currentSprint.dayIds) {
days.add(await _dayController.fetchDayById(dayId))
}
}
// use `days` variable
しかし、メソッドで呼び出すことができるオブジェクトにpopulateWithDays
メソッドがあれば防ぐことができる豊富なコードを追加すると思います。Sprint
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);
}
}
が呼び出されたときに、プロパティに関連付けられている s オブジェクトのSprint
リストを保持するようにモデルを変更することで、これを行うことができます。しかし、同じオブジェクトに保存したくありません。Day
dayIds
days
populateWithDays
dayIds
days