Mutablestateflow в Android Compose и обновление состоянияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Mutablestateflow в Android Compose и обновление состояния

Сообщение Anonymous »

Может быть, кто -то может помочь мне лучше понять, где проблема здесь.

Я не могу понять, почему, когда в прошлой инструзуционной промежутке.

Код: Выделить всё

@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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»