Pablo
06/06/2024, 9:24 PMPablo
06/06/2024, 9:26 PMOutlinedTextField(value = uiState.searchText, onValueChange = onQueryChange)
onQueryChange is calling this function on the viewmodel which is updating the uiState:
fun updateSearchText(searchText: String) {
viewModelScope.launch {
userPreferencesRepository.saveSearchTextPreference(searchText)
updateSearchResults()
}
}
This is the part that updates the uiState:
private suspend fun updateSearchResults() {
val searchText = userPreferencesRepository.searchText.first()
val searchResult = if (searchText != "")
flightRepository.getAirportsByIatOrName(searchText).filterNotNull().first()
else
emptyList()
val favorites = flightRepository.getFavorites().filterNotNull().first()
uiState = uiState.copy(
searchResult = searchResult,
favorites = favorites,
searchText = searchText
)
}
This is the datastore function which stores the value of searchText:
suspend fun saveSearchTextPreference(searchText: String) {
dataStore.edit { preferences ->
preferences[SEARCH_TEXT] = searchText
}
}
ephemient
06/06/2024, 9:34 PMlaunch
you are doing exactly what you shouldn't be doing, https://medium.com/androiddevelopers/effective-state-management-for-textfield-in-compose-d6e5b070fbe5Pablo
06/06/2024, 9:34 PMPablo
06/06/2024, 9:35 PMephemient
06/06/2024, 9:35 PMPablo
06/06/2024, 9:37 PMPablo
06/06/2024, 9:37 PMPablo
06/06/2024, 9:38 PMPablo
06/06/2024, 9:39 PMPablo
06/06/2024, 9:40 PMPablo
06/06/2024, 9:41 PMephemient
06/06/2024, 9:41 PMephemient
06/06/2024, 9:41 PMPablo
06/06/2024, 9:43 PMPablo
06/06/2024, 9:43 PMephemient
06/06/2024, 9:44 PMephemient
06/06/2024, 9:45 PMPablo
06/06/2024, 9:46 PMPablo
06/06/2024, 9:46 PMPablo
06/06/2024, 9:46 PMPablo
06/06/2024, 9:47 PMephemient
06/06/2024, 9:49 PMPablo
06/06/2024, 9:50 PMPablo
06/06/2024, 9:50 PMPablo
06/06/2024, 9:51 PMephemient
06/06/2024, 9:51 PMPablo
06/06/2024, 9:52 PMPablo
06/06/2024, 9:58 PMPablo
06/06/2024, 9:58 PMephemient
06/06/2024, 10:02 PMPablo
06/06/2024, 10:02 PMPablo
06/06/2024, 10:02 PMPablo
06/06/2024, 10:02 PMPablo
06/06/2024, 10:02 PM