gpt4 book ai didi

android - 我们如何保存和恢复 Android StateFlow 的状态?

转载 作者:行者123 更新时间:2023-12-05 04:39:29 24 4
gpt4 key购买 nike

我们可以用类似下面的方式创建 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com