Mehdi Haghgoo
11/22/2021, 10:24 AMnitrog42
11/22/2021, 10:35 AMnitrog42
11/22/2021, 10:36 AMMehdi Haghgoo
11/22/2021, 10:40 AMnitrog42
11/22/2021, 10:44 AMnitrog42
11/22/2021, 10:45 AMMehdi Haghgoo
11/22/2021, 10:50 AMMehdi Haghgoo
11/22/2021, 10:51 AMclass MainViewModel : ViewModel() {
// TODO: Implement the ViewModel
private val _currentMessage: MutableLiveData<String> = MutableLiveData("")
private val _messages: MutableLiveData<MutableList<String>> = MutableLiveData()
val messages: LiveData<MutableList<String>> = _messages
val currentMessage: LiveData<String> = _currentMessage
fun setCurrentMessage(message:String){
_currentMessage.value = message
}
fun onAddMessage(message: String){
// val temp = mutableListOf(message).apply{
// _messages.value?.let { addAll(it) }
// }
// _messages.value = temp
_messages.value?.add(message)
Log.d("MainViewModel", "onAddMessage: New message added: $message. Total: ${_messages.value?.size}")
}
}
Code that uses it:
Column{
Log.d("MainFragment", "onCreateView: number of messages: ${messages?.size}")
messages?.forEach { msg -> Text(msg, Modifier.padding(8.dp)) }
}
nitrog42
11/22/2021, 10:53 AMnitrog42
11/22/2021, 10:53 AMprivate val _messages: MutableLiveData<MutableList<String>> = MutableLiveData()
-> _messages is empty, you need to either use MutableLiveData(mutableList()) or pass the list (as in your commented code)nitrog42
11/22/2021, 10:54 AMval message = mutableStateListOf()
Mehdi Haghgoo
11/22/2021, 11:08 AMZach Klippenstein (he/him) [MOD]
11/22/2021, 3:57 PMColton Idle
11/22/2021, 6:17 PMA mutable list inside a state holder (a MutableState, StateFlow, LiveData, etc) is always a smell.Makes sense.
Either use an immutable listok
or that mutableStateListOfI would assume mutableStateListOf is the thing I should reach for first typically?
Zach Klippenstein (he/him) [MOD]
11/22/2021, 6:40 PMColton Idle
11/22/2021, 6:50 PMZach Klippenstein (he/him) [MOD]
11/24/2021, 3:43 PM