setStartFromUserLocation method
- 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();
}
}
}