Archie
08/27/2020, 5:16 PMstate
would need to be store in
var someState by savedInstanceState<String?> { ... }
but what if the state is inside a LiveData
and is accessed as
var liveDataState by liveData.observeState()
How could I put this liveDataState
inside savedInstanceState
?Zach Klippenstein (he/him) [MOD]
08/27/2020, 5:20 PMLiveData
should be responsible for saving/restoring its internal state in that case. Otherwise, you’ve got two sources of truth.Archie
08/27/2020, 5:26 PMvar liveDataState by liveData.observeState()
var someState by savedInstanceState { liveDataState }
SomeView(someState)
I'm really sorry about this.mattinger
08/27/2020, 5:36 PMmattinger
08/27/2020, 5:37 PMmattinger
08/27/2020, 5:37 PMArchie
08/27/2020, 5:38 PMLiveData
but how about Flow
or Rx
?Archie
08/27/2020, 5:57 PMclass MyViewModel(
val savedStateHandle: SaveStateHandle
): ViewModel {
private val myMutableFlow = MutableStateFlow<String>("")
val flow: StateFlow<String> = myMutableFlow
private savedStateLiveData = savedStateHandle.getLiveData("MyKey")
init {
savedStateLiveData.observeForever { savedValue ->
myMutableFlow.value = savedValue
}
}
....
override onCleared() {
savedStateLiveData.removeObservers()
}
}