I made the logic for moving between screens and added stubs #5

Merged
student-18211 merged 2 commits from student-15047/NTO-2025-Android-TeamTask:main into main 2025-12-05 18:35:30 +00:00
2 changed files with 14 additions and 13 deletions
Showing only changes of commit 655baf713f - Show all commits

View File

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

View File

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