setStartFromUserLocation method

Future<void> setStartFromUserLocation(
  1. BuildContext context
)

Sets the start point to the user's location (GPS permission or VPS scan).

Implementation

Future<void> setStartFromUserLocation(BuildContext context) async {
  unfocusStartPoint();
  if (_vpsScanFlowDisabled &&
      _locationSource == LocationSource.VPS &&
      _vpsState == VPSState.NOT_POSITIONING) {
    return;
  }

  if (_locationSource == LocationSource.VPS) {
    if (_vpsState == VPSState.NOT_POSITIONING) {
      await showDialog<void>(
        context: context,
        builder: (BuildContext dialogContext) {
          return ScanDialogWidget(
            mContext: dialogContext,
            vpsOnboardingAcknowledged: _vpsOnboardingAcknowledged,
            itineraryWidgetController: this,
            onPermissionsGranted: () async {
              _isCalculating = true;
              _notify();
              _mapManager!.removeItinerary();
              _mapManager!.addItineraryFromUserLocation(
                destination: _endPoint!.coordinate,
              );
              await _initializeStartPointLabel();
            },
            setStateCallback: _notify,
          );
        },
      );
    } else if (_vpsState == VPSState.ACCURATE_POSITIONING ||
        _vpsState == VPSState.DEGRADED_POSITIONING) {
      _isCalculating = true;
      _notify();
      _mapManager!.removeItinerary();
      _mapManager!.addItineraryFromUserLocation(
        destination: _endPoint!.coordinate,
      );
      await _initializeStartPointLabel();
    }
  } else {
    final status = await Permission.location.status;
    if (status.isDenied || status.isPermanentlyDenied) {
      final requestStatus = await Permission.location.request();
      if (requestStatus.isGranted) {
        _isCalculating = true;
        _notify();
        _mapManager!.removeItinerary();
        _mapManager!.addItineraryFromUserLocation(
          destination: _endPoint!.coordinate,
        );
        await _initializeStartPointLabel();
      } else if (requestStatus.isPermanentlyDenied) {
        await openAppSettings();
      }
    } else if (status.isGranted) {
      _isCalculating = true;
      _notify();
      _mapManager!.removeItinerary();
      _mapManager!.addItineraryFromUserLocation(
        destination: _endPoint!.coordinate,
      );
      await _initializeStartPointLabel();
    }
  }
}