getCityName method

  1. @override
Future<String?> getCityName({
  1. required double lat,
  2. required double lon,
})
override

Implementation

@override
Future<String?> getCityName({
  required double lat,
  required double lon,
}) async {
  try {
    final Placemark placeMark = (await placemarkFromCoordinates(
      lat,
      lon,
    )).first;

    final String name = placeMark.name ?? '';
    final String subLocality = placeMark.subLocality?.trim() ?? '';
    final String locality = placeMark.locality?.trim() ?? '';
    final String administrativeArea = placeMark.administrativeArea ?? '';
    final String postalCode = placeMark.postalCode ?? '';
    final String isoCountryCode = placeMark.isoCountryCode ?? '';
    final String country = placeMark.country ?? '';

    final String address =
        "$name, $subLocality, $locality, $administrativeArea "
        "postalCode: $postalCode, isoCountryCode: $isoCountryCode $country";
    debugPrint('CityNameServiceImpl | getCityName | address : $address');

    final List<String> locationParts = [
      subLocality,
      locality,
      administrativeArea,
      country,
    ];

    final String cityName = locationParts.firstWhere(
      (part) => part.isNotEmpty,
      orElse: () => address,
    );

    debugPrint('CityNameServiceImpl | getCityName | cityName: $cityName');
    return cityName;
  } catch (e) {
    debugPrint('CityNameServiceImpl | getCityName | error: $e');
    return null;
  }
}