Я не могу понять, почему, когда в прошлой инструзуционной промежутке.
Код: Выделить всё
@HiltViewModel
class OnBoardingViewModel
@Inject
constructor(
private val updateOnboardingCompletedUseCase: UpdateIsOnboardingCompletedUseCase,
) : ViewModel() {
private val _onBoardingState =
MutableStateFlow(
OnboardingState(),
)
val onBoardingState: StateFlow get() = _onBoardingState.asStateFlow()
fun navigateToScreen(screen: OnBoardingScreen) {
updateState { copy(currentScreen = screen) }
}
fun updateStartDate(date: LocalDate) {
updateState {
copy(menstruationEvent = menstruationEvent.copy(startDate = date))
}
}
fun updateOnboardingCompleted(menstruationEvent: MenstruationEvent) {
viewModelScope.launch(IO) {
updateOnboardingCompletedUseCase(menstruationEvent)
}
}
private fun updateState(update: OnboardingState.() -> OnboardingState) {
viewModelScope.launch {
_onBoardingState.value = _onBoardingState.value.update()
Log.e("updateState", "updateState: ${_onBoardingState.value}")
}
}
}
< /code>
и это композитно: < /p>
@Composable
fun OnBoardingScreen(
navigateTo: ((route: String) -> Unit),
modifier: Modifier = Modifier,
viewModel: OnBoardingViewModel = hiltViewModel(),
) {
val onBoardingState by viewModel.onBoardingState.collectAsState()
AnimatedContent(
targetState = onBoardingState,
transitionSpec = {
fadeIn(animationSpec = tween(600)) togetherWith fadeOut(animationSpec = tween(200))
},
label = "",
) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.padding(32.dp),
) {
when (it.currentScreen) {
OnBoardingScreen.Welcome -> {
Welcome {
viewModel.navigateToScreen(OnBoardingScreen.LastMenstruationEvent)
}
}
OnBoardingScreen.LastMenstruationEvent -> {
LastMenstruationStartDateInputScreen(
onDateSelect = { viewModel.updateStartDate(it) },
onNextClick = {
viewModel.navigateToScreen(OnBoardingScreen.EnterCycleDuration)
},
onNavigateBack = {
viewModel.navigateToScreen(OnBoardingScreen.Welcome)
},
showContinueButton = { onBoardingState.menstruationEvent.startDate != null },
)
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -the-state