diff --git a/app/src/main/java/com/hoc/flowmvi/App.kt b/app/src/main/java/com/hoc/flowmvi/App.kt index c7f617c4..95b64d67 100644 --- a/app/src/main/java/com/hoc/flowmvi/App.kt +++ b/app/src/main/java/com/hoc/flowmvi/App.kt @@ -6,12 +6,25 @@ import com.hoc.flowmvi.data.dataModule import com.hoc.flowmvi.domain.domainModule import com.hoc.flowmvi.ui.add.addModule import com.hoc.flowmvi.ui.main.mainModule +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.consumeAsFlow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.onSubscription +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.runBlocking import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger import org.koin.core.context.startKoin import org.koin.core.logger.Level +import kotlin.coroutines.EmptyCoroutineContext import kotlin.time.ExperimentalTime @Suppress("unused") 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 d781e5a6..8ac536ec 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 @@ -26,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.publish import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.scan import kotlinx.coroutines.flow.shareIn @@ -41,7 +42,11 @@ internal class AddVM( private val _intentFlow = MutableSharedFlow(extraBufferCapacity = 64) val viewState: StateFlow - val singleEvent: Flow get() = _eventChannel.receiveAsFlow() + val singleEvent: Flow = _eventChannel.receiveAsFlow().shareIn( + viewModelScope, + started = SharingStarted.WhileSubscribed(), + replay = 0, + ) suspend fun processIntent(intent: ViewIntent) = _intentFlow.emit(intent) diff --git a/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt b/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt index 917445db..89af389c 100644 --- a/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt +++ b/feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainActivity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.util.Log import android.view.Menu import android.view.MenuItem +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope 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 2039fce8..96abfc7a 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 @@ -44,7 +44,11 @@ internal class MainVM( private val _intentFlow = MutableSharedFlow(extraBufferCapacity = 64) val viewState: StateFlow - val singleEvent: Flow get() = _eventChannel.receiveAsFlow() + val singleEvent: Flow = _eventChannel.receiveAsFlow().shareIn( + viewModelScope, + started = SharingStarted.WhileSubscribed(), + replay = 0, + ) suspend fun processIntent(intent: ViewIntent) = _intentFlow.emit(intent)