I made the logic for moving between screens and added stubs

This commit is contained in:
2025-12-05 21:32:25 +03:00
parent f632ddbe2b
commit 655baf713f
2 changed files with 14 additions and 13 deletions

View File

@@ -49,10 +49,9 @@ fun BookScreen(
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
Log.d("BookScreen", "1") Log.d("BookScreen", "1")
viewModel.navigationFlow.collect { viewModel.navigationFlow.collect { event ->
// TODO настроить наконец это переход между экранами Log.d("navigation", "Event received: $event")
// Log.d("BookScreen", "2") when (event) {
when (it) {
BookNavigationEvent.NavigateToMain -> { BookNavigationEvent.NavigateToMain -> {
Log.d("BookScreen", "3") Log.d("BookScreen", "3")
navController.navigate(MainScreenDestination) navController.navigate(MainScreenDestination)

View File

@@ -8,6 +8,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -18,21 +19,18 @@ import ru.myitschool.work.ui.screen.Booking
class BookViewModel : ViewModel() { class BookViewModel : ViewModel() {
private val _uiState = MutableStateFlow<BookState>(BookState.Loading) private val _uiState = MutableStateFlow<BookState>(BookState.Loading)
val uiState: StateFlow<BookState> = _uiState.asStateFlow(); val uiState: StateFlow<BookState> = _uiState.asStateFlow();
private val _actionFlow: MutableSharedFlow<Unit> = MutableSharedFlow()
val actionFlow: SharedFlow<Unit> = _actionFlow
private val _navigationFlow = MutableSharedFlow<BookNavigationEvent>() private val _navigationFlow = MutableSharedFlow<BookNavigationEvent>()
val navigationFlow: SharedFlow<BookNavigationEvent> = _navigationFlow val navigationFlow: SharedFlow<BookNavigationEvent> = _navigationFlow.asSharedFlow()
init { init {
loadData() loadData()
} }
private fun loadData() { private fun loadData() {
_uiState.update { BookState.Loading }
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
_uiState.update { BookState.Loading }
val code = AuthRepository.getSavedCode() ?: run { val code = AuthRepository.getSavedCode() ?: run {
onIntent(BookIntent.ToAuthScreen) _navigationFlow.emit(BookNavigationEvent.NavigateToAuth)
Log.d("", "Go to AuthScreen") Log.d("", "Go to AuthScreen")
return@launch return@launch
} }
@@ -90,7 +88,7 @@ class BookViewModel : ViewModel() {
_uiState.update { BookState.Loading } _uiState.update { BookState.Loading }
BookRepository.sendData(intent.code, intent.booking).fold( BookRepository.sendData(intent.code, intent.booking).fold(
onSuccess = { onSuccess = {
_actionFlow.emit(Unit) _navigationFlow.tryEmit(BookNavigationEvent.NavigateToMain)
}, },
onFailure = { error -> onFailure = { error ->
BookState.Error(error.message ?: "Неизвестная ошибка") BookState.Error(error.message ?: "Неизвестная ошибка")
@@ -99,11 +97,15 @@ class BookViewModel : ViewModel() {
} }
} }
BookIntent.BackToMainScreen -> { BookIntent.BackToMainScreen -> {
_navigationFlow.tryEmit(BookNavigationEvent.NavigateToMain) viewModelScope.launch {
_navigationFlow.emit(BookNavigationEvent.NavigateToMain)
}
} }
BookIntent.LoadData -> loadData() BookIntent.LoadData -> loadData()
BookIntent.ToAuthScreen -> { BookIntent.ToAuthScreen -> {
_navigationFlow.tryEmit(BookNavigationEvent.NavigateToAuth) viewModelScope.launch {
_navigationFlow.emit(BookNavigationEvent.NavigateToAuth)
}
} }
} }
} }