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

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

https://stackoverflow.com/questions/70433526/

相关文章:

typescript - 数组中泛型的联合

c# - 在 Visual Studio 中替换后删除空行

javascript - React 中状态变量的顺序重要吗?

python - pandas mysql 如何使用 Dataframe 更新某些行列

java - ThreadPoolExecutor.shutdownNow() 没有在 Thread

c++ - 模板数据结构 - 访问从抽象类派生的模板类的 getter 和 setter

python - 是否可以在 discord.py 中对不同的前缀使用不同的命令?

c# - 检查ClassDeclarationSyntax是否实现了特定接口(interface)(

algorithm - 加权图的最短路径,但权重有点特殊

c++ - 无法构建 Boost Spirit 示例 conjure2