到目前为止,我一直在使用Flow并将其映射到LiveData,如下所示-
MyService看起来像这样-
override fun provideData(action: MyAction) = flow {
emit(MyResult.Loading)
emit(dataRepository.getNewData())
}ViewModel看起来像这样-
fun getData() = myService.provideData(MyAction.GetData).map {
}.asLiveData(Dispatchers.Default + viewModelScope.coroutineContext)我想搬到StateFlow去。如何在StateFlow中使用emit函数,就像我在Flow中使用它一样。
发布于 2020-10-29 19:58:01
您可以像以前一样编写流,但将.asLiveData(scope)替换为.stateIn(scope, SharingStarted.Eagerly, null),以获得一个在相应作用域中运行的StateFlow实例,其行为与您之前使用LiveData获得的行为类似-共享立即开始,初始值为null (就像使用LiveData一样)。
有关所有stateIn运算符参数的更多详细信息和说明,请阅读此处https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/state-in.html
https://stackoverflow.com/questions/64563018
复制相似问题