geocodeAddress static method
Geocodes an address string via Google Maps API. Returns {lat, lng, source:'google'} or null on failure / missing key. Aborts after 800 ms to avoid blocking address submission. API key is read from CDN remoteKeys (RemoteKeyKeys.googleMapsKey).
Implementation
static Future<Map<String, dynamic>?> geocodeAddress(String addressStr) async {
final apiKey = cdnConfigInstance.getRemoteKey(RemoteKeyKeys.googleMapsKey);
if (apiKey.isEmpty) return null;
try {
final dio = Dio()
..options.connectTimeout = const Duration(milliseconds: 800)
..options.receiveTimeout = const Duration(milliseconds: 800);
final response = await dio.get(
'https://maps.googleapis.com/maps/api/geocode/json',
queryParameters: {'address': addressStr, 'key': apiKey},
);
final data = response.data;
if (data?['status'] != 'OK') return null;
final results = data['results'] as List?;
if (results == null || results.isEmpty) return null;
final loc = results[0]?['geometry']?['location'];
final lat = loc?['lat'];
final lng = loc?['lng'];
if (lat == null || lng == null) return null;
return {'lat': lat, 'lng': lng, 'source': 'google'};
} catch (_) {
return null;
}
}