setTracking method

void setTracking(
  1. bool tracking
)

Implementation

void setTracking(bool tracking) {
  debugPrint('[GPS_ANIM] setTracking called: $tracking, was: $_isTracking');
  if (_isTracking == tracking) return;
  bool wasTracking = _isTracking;
  _isTracking = tracking;
  _fireStateUpdate();

  if (!wasTracking && tracking) {
    final isTickerRunning = (_gpsAnimationTicker?.isTicking == true) || (_ticker?.isTicking == true);

    if (isTickerRunning) {
      // If ticker is running, let the ticker smoothly slide the camera back to the vehicle
      _isReturningToVehicle = true;
      _isCameraTransitioning = false; // No need for static animateCamera
    } else {
      // If stationary (no ticker running), use MapLibre's built-in animateCamera
      _isCameraTransitioning = true;
      _isReturningToVehicle = true;

      final targetPos = _lastGpsPos ?? stateNotifier.value?.currentPosition;
      if (targetPos != null) {
        final targetBearing = stateNotifier.value?.vehicleBearing ?? 0.0;
        _controller.mapController.animateCamera(
          CameraUpdate.newCameraPosition(
            CameraPosition(
              target: _offsetCameraTarget(targetPos),
              tilt: _cameraTilt,
              zoom: 17.0,
              bearing: targetBearing,
            ),
          ),
          duration: const Duration(milliseconds: 800),
        ).then((_) {
          _isCameraTransitioning = false;
          _isReturningToVehicle = false;
        });
      } else {
        _isCameraTransitioning = false;
        _isReturningToVehicle = false;
      }
    }
  }
}