Pablo
03/12/2025, 6:44 PMvar apiUrl by mutableStateOf("")
private set
init {
viewModelScope.launch(<http://Dispatchers.IO|Dispatchers.IO>) {
val apiUrl = dataStoreRepository.readString("api_url").firstOrNull()
apiUrl?.let { updateApiUrl(it) }
}
}
fun updateApiUrl(input: String) { apiUrl = input }
and this is the composable which recovers the value of apiUrl from their vm
vm: SettingsScreenViewModel = koinViewModel()
OutlinedTextField(
value = vm.apiUrl,
onValueChange = { vm.updateApiUrl(it) },
label = { Text(stringResource(R.string.api_url)) }
)
mattinger
03/12/2025, 6:46 PMPablo
03/12/2025, 6:52 PMZach Klippenstein (he/him) [MOD]
03/12/2025, 7:44 PMPablo
03/12/2025, 9:44 PMComposing composable with projectToken value:
projectToken collected in vm init block, saving it in mutableState var. Token value: asd9821798asd9a8
Composing composable with projectToken value:
as you can see, first the composable is composed, then, the token is collected and saved, then the composabe is recomposed, but ignoring the value...Pablo
03/13/2025, 9:08 PMPablo
03/14/2025, 9:14 AMPablo
03/14/2025, 9:15 AMwithContext(Dispatchers.Main) {}
embeding apiUrl?.let { updateApiUrl(it) }
then it works... but why?Zach Klippenstein (he/him) [MOD]
03/14/2025, 4:49 PMPablo
03/14/2025, 4:56 PMPablo
03/14/2025, 4:57 PMZach Klippenstein (he/him) [MOD]
03/14/2025, 4:57 PMPablo
03/14/2025, 4:57 PMPablo
03/14/2025, 4:58 PMZach Klippenstein (he/him) [MOD]
03/14/2025, 4:58 PMPablo
03/14/2025, 4:59 PMPablo
03/14/2025, 4:59 PMZach Klippenstein (he/him) [MOD]
03/14/2025, 4:59 PMPablo
03/14/2025, 5:00 PMPablo
03/14/2025, 5:01 PMZach Klippenstein (he/him) [MOD]
03/14/2025, 5:02 PMPablo
03/14/2025, 5:07 PMLaunchedEffect(true) {
vm.loadPersistedData()
}
Pablo
03/18/2025, 1:12 PMZach Klippenstein (he/him) [MOD]
03/22/2025, 1:06 PMPablo
03/24/2025, 3:08 PM