getUserCurrentLocation static method
Implementation
static Future<Map<String, dynamic>> getUserCurrentLocation(
double latitude,
double longitude, {
bool searchAdministrativeAreaLevel2 = false,
required String googleKey,
}) async {
if (latitude == 0 && latitude == 0) {
return {"formattedAddress": '', "explodedAddress": ExplodedAddress()};
}
final Response response = await Dio().get(
'https://maps.googleapis.com/maps/api/geocode/json?latlng=$latitude,$longitude&key=$googleKey&language=pt-BR',
);
Geocoder geocoder = Geocoder.fromJson(response.data);
if (geocoder.results!.isEmpty) {
return {"formattedAddress": '', "explodedAddress": ExplodedAddress()};
}
final firstResultValid = geocoder.results!.firstWhere((e) {
List<AddressComponent>? addressComponents = e.addressComponents!;
final item =
addressComponents.where((a) => a.types!.contains('route')).toList();
return item.isNotEmpty;
}, orElse: () => Result());
if (firstResultValid.addressComponents == null) {
return {"formattedAddress": '', "explodedAddress": ExplodedAddress()};
}
if (searchAdministrativeAreaLevel2) {
final administrativeArea = geocoder.results!.firstWhere((e) {
List<AddressComponent>? addressComponents = e.addressComponents!;
final item =
addressComponents
.where((a) => a.types!.contains('administrative_area_level_2'))
.toList();
return item.isNotEmpty;
});
if (administrativeArea.addressComponents != null) {
firstResultValid.addressComponents!.addAll(
administrativeArea.addressComponents!,
);
}
}
ExplodedAddress explodedAddress = ExplodedAddress.fromAddressComponents(
firstResultValid.addressComponents!,
);
return {
"formattedAddress": geocoder.results!.first.formattedAddress,
"explodedAddress": explodedAddress,
};
}