Filtering
Filtering is an optional feature. It allows to filter the preferences and render the result as a flat list or just filters and still keeps the hierarchy intact.
Setup#
You just have to define a filter mode...
val filterModes = listOf(
DefaultPreferenceFilter.Mode.ContainsText,
DefaultPreferenceFilter.Mode.AllWords(false),
DefaultPreferenceFilter.Mode.AnyWord(false)
)
... then create a filter setup ...
val filter = rememberDefaultPreferenceFilter(
highlightSpan = SpanStyle(color = Color.Red),
mode = filterModes[0]
)
... and finally pass on the filter to the screen:
PreferenceScreen(
modifier = Modifier.weight(1f).fillMaxWidth(),
settings = settings,
filter = filter,
state = state
)
Filter#
Afterwards simple adjust the filter.search
state in your TextField
or wherever you want and the screen will automatically update the list of preferences based on your filter settings.
Other customisations#
Additionally the filter
object does provide some states to make more adjustments if desired.
/**
* Remember a DefaultPreferenceFilter with the given parameters.
*
* @param search the search string to filter by
* @param flattenResult Whether to flatten the result of the filter
* @param mode the mode to use for the filter
* @param ignoreCase whether to ignore the case of the search string
* @param highlightSpan the SpanStyle to use for highlighting the search string
*/
class DefaultPreferenceFilter internal constructor(
override val search: MutableState<String>,
override val flattenResult: MutableState<Boolean>,
val mode: MutableState<Mode>,
private val ignoreCase: MutableState<Boolean>,
private val highlightSpan: SpanStyle
) : PreferenceFilter
Custom filter#
If desired, you can implement a full custom implementation of the PreferenceFilter
interface. Just check out the DefaultPreferenceFilter
to find an example on how this is done.