startNewTrack method
Implementation
@override
Future<TrackStartResult> startNewTrack(TrackStartRequest request) async {
_requireOwner(request.owner);
if (_currentTrack?.isResumable == true ||
_currentTrack?.status == TrackStatus.active) {
throw const TrackingConflictException(
code: 'active_track_conflict',
message: 'A fake route is already active or resumable.',
);
}
if (!_readiness.canStart) {
throw const TrackingNotReadyException(
code: 'tracking_not_ready',
message: 'Fake readiness blocks Start.',
);
}
final now = _clock().toUtc();
final id = request.requestedTrackId ?? 'fake-track-${_nextTrack++}';
final track = Track(
id: id,
userId: _owner.userId,
organizationId: _owner.organizationId,
routeId:
request.routeId == null ? null : createRouteId(request.routeId!, now),
status: TrackStatus.active,
startedAt: now,
totalDistanceMeters: 0,
acceptedPointCount: 0,
rejectedPointCount: 0,
segmentCount: 1,
nextSequence: 1,
currentSegmentId: '$id-segment-1',
config: request.config ?? const TrackingConfig(),
);
_tracks[id] = track;
_points[id] = <TrackPoint>[];
calls.add(
FakeTrackingCall('startNewTrack', <String, Object?>{'trackId': id}));
_history.add(
TrackHistoryEvent(kind: TrackHistoryChangeKind.created, trackId: id));
_publish();
return TrackStartResult(
track: track,
disposition: TrackStartDisposition.created,
readiness: _readiness,
);
}