From 5b99f29492b233c60101d625e354c9937736eef8 Mon Sep 17 00:00:00 2001 From: Petrus Nguyen Thai Hoc Date: Sun, 31 Jan 2021 01:51:28 +0700 Subject: [PATCH] using channel --- feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt | 8 +++++--- .../src/main/java/com/hoc/flowmvi/ui/main/MainVM.kt | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt b/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt index ab14c1ba..d781e5a6 100644 --- a/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt +++ b/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt @@ -12,6 +12,7 @@ import com.hoc.flowmvi.domain.entity.User import com.hoc.flowmvi.domain.usecase.AddUserUseCase import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharingStarted @@ -25,6 +26,7 @@ import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.scan import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn @@ -35,11 +37,11 @@ internal class AddVM( private val addUser: AddUserUseCase, private val savedStateHandle: SavedStateHandle ) : ViewModel() { - private val _eventFlow = MutableSharedFlow(extraBufferCapacity = 64) + private val _eventChannel = Channel(Channel.BUFFERED) private val _intentFlow = MutableSharedFlow(extraBufferCapacity = 64) val viewState: StateFlow - val singleEvent: Flow get() = _eventFlow + val singleEvent: Flow get() = _eventChannel.receiveAsFlow() suspend fun processIntent(intent: ViewIntent) = _intentFlow.emit(intent) @@ -76,7 +78,7 @@ internal class AddVM( is PartialStateChange.FormValueChange.FirstNameChanged -> return@onEach is PartialStateChange.FormValueChange.LastNameChanged -> return@onEach } - _eventFlow.emit(event) + _eventChannel.send(event) } } diff --git a/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainVM.kt b/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainVM.kt index 7b7f0b02..2039fce8 100644 --- a/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainVM.kt +++ b/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainVM.kt @@ -9,6 +9,7 @@ import com.hoc.flowmvi.domain.usecase.RefreshGetUsersUseCase import com.hoc.flowmvi.domain.usecase.RemoveUserUseCase import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharingStarted @@ -25,6 +26,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.scan import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn @@ -38,11 +40,11 @@ internal class MainVM( private val refreshGetUsers: RefreshGetUsersUseCase, private val removeUser: RemoveUserUseCase, ) : ViewModel() { - private val _eventFlow = MutableSharedFlow(extraBufferCapacity = 64) + private val _eventChannel = Channel(Channel.BUFFERED) private val _intentFlow = MutableSharedFlow(extraBufferCapacity = 64) val viewState: StateFlow - val singleEvent: Flow get() = _eventFlow + val singleEvent: Flow get() = _eventChannel.receiveAsFlow() suspend fun processIntent(intent: ViewIntent) = _intentFlow.emit(intent) @@ -80,7 +82,7 @@ internal class MainVM( is PartialChange.GetUser.Data -> return@onEach PartialChange.Refresh.Loading -> return@onEach } - _eventFlow.emit(event) + _eventChannel.send(event) } }