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.