在 Kotlin StateFlow 中使用 emmit

Ma2*_*340 1 android kotlin android-livedata kotlin-coroutines

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

看起来MyService像这样——

override fun provideData(action: MyAction) = flow {
   emit(MyResult.Loading)
   emit(dataRepository.getNewData())
}
Run Code Online (Sandbox Code Playgroud)

看起来ViewModel像这样——

fun getData() = myService.provideData(MyAction.GetData).map {
                
}.asLiveData(Dispatchers.Default + viewModelScope.coroutineContext)
Run Code Online (Sandbox Code Playgroud)

我想搬到StateFlow. 我怎样才能emitStateFlow使用Flow.

Rom*_*rov 6

您可以像以前一样编写流程,但替换.asLiveData(scope)为以获取在相应范围内运行的.stateIn(scope, SharingStarted.Eagerly, null)实例,其行为与您在立即启动 \xe2\x80\x94 共享之前获得的行为类似,并且初始值为(就像)。StateFlowLiveDatanullLiveData

\n

stateIn您可以在此处阅读此处,了解所有运算符参数的更多详细信息和说明https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/state-in.html

\n