Tutorial 3
Let users find the right item.
Search and filters make a catalogue useful. Keep filtering logic pure so it is easy to test and debug.
Search flow
Query
Category
Filter function
Visible list
Filter function
fun filterBusinesses(
businesses: List<Business>,
query: String,
category: String?
): List<Business> {
val normalizedQuery = query.trim().lowercase()
return businesses.filter { business ->
val matchesQuery =
business.name.lowercase().contains(normalizedQuery) ||
business.city.lowercase().contains(normalizedQuery)
val matchesCategory =
category == null || business.category == category
matchesQuery && matchesCategory
}
}Practice task
- Add a search TextField above the list.
- Add category chips for Clinic, School, Coaching, and Services.
- Show “No results” when filters remove every item.
- Keep the filter function separate from UI code.