deriveTrajectoryTimeline function

TrajectoryTimelineModel? deriveTrajectoryTimeline(
  1. List<TrajectoryTurnModel> turns, [
  2. 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,
  );
}