getAddress static method

Future<Map<String, String?>> getAddress({
  1. required String provinceCode,
  2. required String municipalityCode,
  3. required String barangayCode,
})

Original method - Get complete address by codes

Implementation

static Future<Map<String, String?>> getAddress({
  required String provinceCode,
  required String municipalityCode,
  required String barangayCode,
}) async {
  await AddressData.loadData();
  await AddressData.loadBarangayShard(provinceCode);

  Map<String, dynamic>? barangay;
  for (final candidate in AddressData.barangayRecordsForMunicipality(
    provinceCode,
    municipalityCode,
  )) {
    if (candidate['barangayCode'].toString() == barangayCode) {
      barangay = candidate;
      break;
    }
  }

  if (barangay == null) {
    return {
      'regionCode': null,
      'regionSubCode': null,
      'provinceName': null,
      'municipalityName': null,
      'barangayName': null,
    };
  }

  final regionCode = barangay['regionCode'].toString();

  final province = _findProvinceByCode(provinceCode, regionCode: regionCode);

  Map<String, dynamic>? municipality;
  for (final candidate in AddressData.municipalities ?? const []) {
    if (candidate['regionCode'].toString() == regionCode &&
        candidate['provinceCode'].toString() == provinceCode &&
        candidate['municipalityCode'].toString() == municipalityCode) {
      municipality = candidate;
      break;
    }
  }

  return {
    'regionCode': regionCode,
    'regionSubCode':
        _getEffectiveRegionSubCode(province) ?? barangay['regionSubCode'],
    'provinceName': province?['provinceName'] ?? barangay['provinceName'],
    'municipalityName':
        municipality?['municipalityName'] ?? barangay['municipalityName'],
    'barangayName': barangay['barangayName'],
  };
}