searchCities method
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;
}