loadTrackBundle method

  1. @override
Future<TrackBundle> loadTrackBundle(
  1. String trackId
)
override

Implementation

@override
Future<TrackBundle> loadTrackBundle(String trackId) async {
  final track = await getTrack(trackId);
  if (track == null) throw StateError('Unknown fake route.');
  final points = List<TrackPoint>.unmodifiable(_points[trackId] ?? const []);
  final segments = <TrackSegmentWithPoints>[];
  for (var number = 1; number <= track.segmentCount; number += 1) {
    final id = '${track.id}-segment-$number';
    final segmentPoints = points
        .where((point) => point.segmentId == id)
        .toList(growable: false);
    segments.add(TrackSegmentWithPoints(
      segment: TrackSegment(
        id: id,
        trackId: track.id,
        segmentNumber: number,
        status: track.status == TrackStatus.completed
            ? TrackSegmentStatus.completed
            : number == track.segmentCount &&
                    track.status == TrackStatus.active
                ? TrackSegmentStatus.active
                : TrackSegmentStatus.paused,
        startedAt: segmentPoints.isEmpty
            ? track.startedAt
            : segmentPoints.first.capturedAt,
        endedAt: track.status == TrackStatus.completed ? track.endedAt : null,
        distanceMeters: 0,
        acceptedPointCount:
            segmentPoints.where((point) => point.accepted).length,
      ),
      points: List<TrackPoint>.unmodifiable(segmentPoints),
    ));
  }
  return TrackBundle(
    track: track,
    segments: segments,
  );
}