import 'dart:convert'; import 'package:http/http.dart' as http; class NominatimGeocoder { static Future reverseGeocodeCity(double lat, double lng) async { final uri = Uri.parse( 'https://nominatim.openstreetmap.org/reverse' '?format=json&lat=$lat&lon=$lng&zoom=10&addressdetails=1', ); final res = await http.get( uri, headers: {'User-Agent': 'ProsApp/1.0 (prosapp.co)'}, ); final data = jsonDecode(res.body) as Map; final address = data['address'] as Map?; return address?['city'] as String? ?? address?['town'] as String? ?? address?['municipality'] as String? ?? address?['county'] as String?; } static Future<(double lat, double lng)?> forwardGeocodeCity( String cityName) async { final uri = Uri.parse( 'https://nominatim.openstreetmap.org/search' '?format=json&limit=1&q=${Uri.encodeQueryComponent(cityName)}', ); final res = await http.get( uri, headers: {'User-Agent': 'ProsApp/1.0 (prosapp.co)'}, ); final data = jsonDecode(res.body) as List; if (data.isEmpty) return null; final first = data.first as Map; final lat = double.tryParse(first['lat']?.toString() ?? ''); final lng = double.tryParse(first['lon']?.toString() ?? ''); if (lat == null || lng == null) return null; return (lat, lng); } }