searchCities method

List<CityModel> searchCities(
  1. String query,
  2. String? stateId, {
  3. int limit = 100,
})

Implementation

List<CityModel> searchCities(String query, String? stateId, {int limit = 100}) {
  if (_cities == null || query.isEmpty) return [];

  final cacheKey = '${query.toLowerCase()}:$stateId:$limit';

  if (_citySearchCache.containsKey(cacheKey)) {
    return _citySearchCache[cacheKey]!;
  }

  final lowerQuery = query.toLowerCase();
  final results = <CityModel>[];
  final Set<String> addedIds = {};

  // Lightning fast indexed search
  _citySearchIndex?.forEach((prefix, cities) {
    if ((prefix.startsWith(lowerQuery) || prefix == lowerQuery) && results.length < limit) {
      for (final city in cities) {
        if (!addedIds.contains(city.id) && results.length < limit &&
            (stateId == null || city.stateId == stateId)) {
          results.add(city);
          addedIds.add(city.id);
        }
      }
    }
  });

  _manageCacheSize(_citySearchCache, cacheKey, results);
  return results;
}