Skip to content

Search Input

The SearchInput component provides a specialized text input for search functionality with built-in search styling and query handling capabilities.

Usage

Basic Search Input

SearchInput(
    modifier = Modifier.fillMaxWidth(),
    placeholderText = "Search...",
    onQueryChanged = { query ->
        // Handle search query
        performSearch(query)
    }
)

Search with Custom Placeholder

SearchInput(
    modifier = Modifier.fillMaxWidth(),
    placeholderText = "Search for products, brands, or categories...",
    onQueryChanged = { query ->
        if (query.length >= 3) {
            searchProducts(query)
        }
    }
)

Search with Query Validation

var searchQuery by remember { mutableStateOf("") }

Column {
    SearchInput(
        modifier = Modifier.fillMaxWidth(),
        placeholderText = "Type to search...",
        onQueryChanged = { query ->
            searchQuery = query
            if (query.length >= 3) {
                performSearch(query)
            }
        }
    )

    if (searchQuery.isNotEmpty() && searchQuery.length < 3) {
        Text(
            text = "Type at least 3 characters",
            style = MaterialTheme.typography.bodySmall,
            color = MaterialTheme.colorScheme.error
        )
    }
}

Multiple Search Inputs

Column(
    verticalArrangement = Arrangement.spacedBy(8.dp)
) {
    SearchInput(
        modifier = Modifier.fillMaxWidth(),
        placeholderText = "Search users...",
        onQueryChanged = { searchUsers(it) }
    )

    SearchInput(
        modifier = Modifier.fillMaxWidth(),
        placeholderText = "Search messages...",
        onQueryChanged = { searchMessages(it) }
    )

    SearchInput(
        modifier = Modifier.fillMaxWidth(),
        placeholderText = "Search files...",
        onQueryChanged = { searchFiles(it) }
    )
}

Search with Real-time Results

var query by remember { mutableStateOf("") }
var results by remember { mutableStateOf(emptyList<String>()) }

LaunchedEffect(query) {
    if (query.isNotEmpty()) {
        // Debounce search
        delay(300)
        results = performSearch(query)
    } else {
        results = emptyList()
    }
}

Column {
    SearchInput(
        modifier = Modifier.fillMaxWidth(),
        placeholderText = "Search...",
        onQueryChanged = { query = it }
    )

    LazyColumn {
        items(results) { result ->
            Text(text = result)
        }
    }
}