geocodeAddress static method

Future<Map<String, dynamic>?> geocodeAddress(
  1. String addressStr
)

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