getUserCurrentLocation static method

Future<Map<String, dynamic>> getUserCurrentLocation(
  1. double latitude,
  2. double longitude, {
  3. bool searchAdministrativeAreaLevel2 = false,
  4. required String googleKey,
})

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,
  };
}