我们可以用类似下面的方式创建 LiveData 或 StateFlow
val _liveData = MutableLiveData(0)
val _stateFlow = MutableStateFlow(0)
但是在LiveData中,我们可以通过使用确保数据的保存和恢复
val _liveData: MutableLiveData<Int> = savedStateHandle.getLiveData("Key", 0)
对于 StateFlow,是否有一种方法(或 API)可以保留最后的值并恢复它,就像我们在 LiveData 中所做的那样?
最佳答案
我在ViewModel中使用常规方式来存储和恢复值
private val _stateFlow = MutableStateFlow(
savedStateHandle.get("key") ?: InitialValue
)
以及设置值的时候
_stateFlow.value = ChangeValue
savedStateHandle.set("key", ChangeValue)
不理想,但至少我们有办法保存最新的值。
感谢 https://www.reddit.com/user/coffeemongrul/ ,谁提供了一个建议,根据 https://www.reddit.com/r/androiddev/comments/rlxrsr/in_stateflow_how_can_we_save_and_restore_android/ 用一个类来包装它
class MutableSaveStateFlow<T>(
private val savedStateHandle: SavedStateHandle,
private val key: String,
defaultValue: T
) {
private val _state: MutableStateFlow<T> =
MutableStateFlow(savedStateHandle.get<T>(key) ?: defaultValue)
var value: T
get() = _state.value
set(value) {
_state.value = value
savedStateHandle.set(key, value)
}
fun asStateFlow(): StateFlow<T> = _state
}
关于android - 我们如何保存和恢复 Android StateFlow 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70433526/