forked from Olympic/NTO-2025-Android-TeamTask
I made the logic for moving between screens and added stubs
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user