首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Kotlin StateFlow使用emit

对Kotlin StateFlow使用emit
EN

Stack Overflow用户
提问于 2020-10-28 05:15:59
回答 1查看 815关注 0票数 0

到目前为止,我一直在使用Flow并将其映射到LiveData,如下所示-

MyService看起来像这样-

代码语言:javascript
复制
override fun provideData(action: MyAction) = flow {
   emit(MyResult.Loading)
   emit(dataRepository.getNewData())
}

ViewModel看起来像这样-

代码语言:javascript
复制
fun getData() = myService.provideData(MyAction.GetData).map {
                
}.asLiveData(Dispatchers.Default + viewModelScope.coroutineContext)

我想搬到StateFlow去。如何在StateFlow中使用emit函数,就像我在Flow中使用它一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64563018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档