getRegionNumbers static method

Future<List<Map<String, dynamic>>> getRegionNumbers()

Returns the available PCIC regionNo values and any special region options, such as 3A.

Implementation

static Future<List<Map<String, dynamic>>> getRegionNumbers() async {
  await AddressData.loadData();

  final regions = <String, Set<String>>{};

  for (final province in AddressData.provinces ?? const []) {
    final regionNo = _normalizeValue(province['RegionNo']);
    if (regionNo == null) {
      continue;
    }

    final provinceRecord = Map<String, dynamic>.from(province);
    final regionOptions = regions.putIfAbsent(regionNo, () => {regionNo});
    if (_getEffectiveRegionSubCode(provinceRecord) == '3A') {
      regionOptions.add('3A');
    }
  }

  final sortedRegions = regions.entries
      .map((entry) => {
            'regionNo': entry.key,
            'regionOptions': [
              entry.key,
              ...entry.value
                  .where((option) => option != entry.key)
                  .toList()
                ..sort(),
            ],
          })
      .toList();
  sortedRegions.sort(
    (a, b) => int.parse(a['regionNo'].toString()).compareTo(
      int.parse(b['regionNo'].toString()),
    ),
  );

  return sortedRegions;
}