determineAddress function

Future<Map<String, dynamic>?> determineAddress([
  1. double? lat,
  2. double? lng,
  3. String locale = 'id_ID'
])

origin: simlpu_mob/lib/globals.dart (determineAddress) union-of: jogjaprov_pamor_mob_masyarakat/lib/globals.dart (getFormattedAddress) author: anovsiradj, opencode-go/glm-5.2 version: 2022-05-31, revised: 2026-08-17

Reverse-geocode via Google Maps /geocode/json. API key from env GOOGLE_MAPS_API_KEY. If lat/lng null, falls back to determinePosition. Returns first result's Map on 200, else the raw response Map. null on error.

Implementation

Future<Map<String, dynamic>?> determineAddress([double? lat, double? lng, String locale = 'id_ID']) async {
  if (lat == null || lng == null) {
    final pos = await determinePosition();
    lat = pos.latitude;
    lng = pos.longitude;
  }

  final apiKey = dotenv.env['GOOGLE_MAPS_API_KEY'] ?? '';
  final uri = Uri.parse('https://maps.google.com/maps/api/geocode/json').replace(queryParameters: {
    'key': apiKey,
    'latlng': '$lat,$lng',
    'language': locale,
  });

  try {
    final res = await http.get(uri).timeout(const Duration(seconds: 10));
    final tmp = jsonDecode(res.body);
    if (res.statusCode == 200) {
      return Map<String, dynamic>.from(tmp['results'][0]);
    }
    return Map<String, dynamic>.from(tmp);
  } catch (e) {
    return null;
  }
}