Skip to content

Commit 70dc348

Browse files
committed
[ISSUE-33] - State to Stateflow - Details Screen
1 parent 53b860d commit 70dc348

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.screens
22

3-
import androidx.compose.runtime.State
4-
import androidx.compose.runtime.mutableStateOf
53
import androidx.lifecycle.DefaultLifecycleObserver
64
import androidx.lifecycle.LifecycleOwner
75
import androidx.lifecycle.ViewModel
86
import androidx.lifecycle.viewModelScope
97
import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure
108
import com.codandotv.streamplayerapp.feature_list_streams.detail.domain.DetailStreamUseCase
119
import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.screens.DetailStreamsUIState.*
12-
import kotlinx.coroutines.flow.onCompletion
10+
import kotlinx.coroutines.flow.MutableStateFlow
11+
import kotlinx.coroutines.flow.SharingStarted
12+
import kotlinx.coroutines.flow.StateFlow
1313
import kotlinx.coroutines.flow.onStart
14+
import kotlinx.coroutines.flow.stateIn
15+
import kotlinx.coroutines.flow.update
1416
import kotlinx.coroutines.launch
1517

1618
class DetailStreamViewModel(
1719
private val useCase: DetailStreamUseCase,
1820
) : ViewModel(), DefaultLifecycleObserver {
1921

20-
private val _uiState = mutableStateOf<DetailStreamsUIState>(LoadingStreamUIState)
21-
val uiState: State<DetailStreamsUIState> = _uiState
22+
private val _uiState = MutableStateFlow<DetailStreamsUIState>(LoadingStreamUIState)
23+
val uiState : StateFlow<DetailStreamsUIState> = _uiState.stateIn(
24+
viewModelScope,
25+
SharingStarted.Eagerly,
26+
initialValue = _uiState.value
27+
)
2228

2329
override fun onCreate(owner: LifecycleOwner) {
2430
super.onCreate(owner)
@@ -29,15 +35,17 @@ class DetailStreamViewModel(
2935
.catchFailure {
3036
println(">>>> ${it.errorMessage}")
3137
}
32-
.collect {
33-
_uiState.value = DetailStreamsLoadedUIState(
34-
detailStream = it
35-
)
38+
.collect { detailStream ->
39+
_uiState.update {
40+
DetailStreamsLoadedUIState(
41+
detailStream = detailStream
42+
)
43+
}
3644
}
3745
}
3846
}
3947

4048
private fun onLoading() {
41-
_uiState.value = LoadingStreamUIState
49+
_uiState.update { LoadingStreamUIState }
4250
}
4351
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/detail/presentation/screens/DetailStreamsScreen.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import androidx.compose.material.icons.filled.*
77
import androidx.compose.material3.*
88
import androidx.compose.runtime.Composable
99
import androidx.compose.runtime.DisposableEffect
10-
import androidx.compose.runtime.remember
10+
import androidx.compose.runtime.getValue
1111
import androidx.compose.ui.Alignment
1212
import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.graphics.Color
@@ -18,6 +18,7 @@ import androidx.compose.ui.unit.dp
1818
import androidx.compose.ui.unit.em
1919
import androidx.compose.ui.unit.sp
2020
import androidx.lifecycle.LifecycleOwner
21+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2122
import androidx.navigation.NavController
2223
import com.codandotv.streamplayerapp.core_shared_ui.resources.Colors.DarkDeepGray
2324
import com.codandotv.streamplayerapp.feature_list_streams.R
@@ -31,17 +32,15 @@ fun DetailStreamScreen(
3132
navController: NavController,
3233
disposable: () -> Unit = {}
3334
) {
34-
val uiStateRemember = remember {
35-
viewModel.uiState
36-
}
35+
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
3736

3837
val lifecycleOwner = LocalLifecycleOwner.current
3938
Lifecycle(lifecycleOwner, viewModel, disposable)
4039

4140
Box(modifier = Modifier.fillMaxSize()) {
42-
when (val uiState = uiStateRemember.value) {
41+
when (uiState) {
4342
is DetailStreamsLoadedUIState -> {
44-
SetupDetailScreen(uiState, navController)
43+
SetupDetailScreen(uiState as DetailStreamsLoadedUIState, navController)
4544
}
4645
else -> {
4746
CircularProgressIndicator(

0 commit comments

Comments
 (0)