getAddress method

Future<FmData?> getAddress({
  1. required double lat,
  2. required double lng,
})

REVERSE GEOCODING: Get address from geocode

Implementation

Future<FmData?> getAddress({required double lat, required double lng}) async {
  // 1. Check local db
  try {
    final data = await _dbService.getAddress(lat, lng);
    if (data != null) return FmData.fromJSON(data);
  } catch (e, st) {
    _logService.logError(e, st);
  }

  // 2. Wait for new request
  final success = await _waitForNewRequest(RequestType.nominatim);
  if (!success) return null;

  // 3. Make API call
  final query = {'lat': lat, 'lon': lng, 'format': 'jsonv2'};
  final url =
      '${_reverseURL.url}?${query.keys.map((k) => '$k=${query[k]}').join('&')}';

  final res = await _apiService.request(
    url: url,
    userAgent: _userAgent ?? _systemService.userAgent,
  );

  // 4. Parse & save response to local db
  try {
    await _dbService.saveAddress(lat, lng, res.data);
    return FmData.fromJSON(res.data);
  } catch (e, st) {
    _logService.logError(e, st, req: '($lat, $lng)', res: res.toString());
    return null;
  }
}