deriveTrajectoryTimeline function
TrajectoryTimelineModel?
deriveTrajectoryTimeline(
- List<
TrajectoryTurnModel> turns, [ - TrajectoryTimelineMode mode = TrajectoryTimelineMode.sequence
Projects every visible record into a stable three-lane timeline.
turns is the unfiltered trajectory layout; mode picks the projection.
Returns null when no record is visible.
Implementation
TrajectoryTimelineModel? deriveTrajectoryTimeline(
List<TrajectoryTurnModel> turns, [
TrajectoryTimelineMode mode = TrajectoryTimelineMode.sequence,
]) {
if (mode != TrajectoryTimelineMode.sequence) {
return _deriveTimedTimeline(
turns,
actualDuration:
mode == TrajectoryTimelineMode.duration ||
mode == TrajectoryTimelineMode.actual,
compressIdle: mode == TrajectoryTimelineMode.duration,
);
}
final spans = <TrajectoryTimelineSpan>[];
final turnBoundaries = <TrajectoryTimelineTurnBoundary>[];
for (final turn in turns) {
final cells = [
for (final group in turn.groups)
for (final cell in group.cells)
if (!_requestOnly(cell)) cell,
];
if (cells.isEmpty) continue;
final turnNumber = turn.turn;
if (turnNumber != null) {
turnBoundaries.add(
TrajectoryTimelineTurnBoundary(
turn: turnNumber,
time: spans.length.toDouble(),
),
);
}
for (final cell in cells) {
spans.add(
_spanFor(cell, start: spans.length.toDouble(), end: spans.length + 1.0),
);
}
}
if (spans.isEmpty) return null;
return TrajectoryTimelineModel(
start: 0,
end: spans.length.toDouble(),
spans: spans,
turnBoundaries: turnBoundaries,
);
}