Я работаю над приложением JetPack Compose, где я получаю данные книги с сервера, используя BooksViewModel . Пользовательский интерфейс должен обновляться на основе состояния (
, успех или error ). Тем не менее, пользовательский интерфейс показывает только состояние загрузки и не переходит на успех или ошибку . Даже когда я отключаю Интернет, пользовательский интерфейс не показывает сообщение об ошибке или защитывание.
Я работаю над приложением JetPack Compose, где я получаю данные книги с сервера, используя BooksViewModel . Пользовательский интерфейс должен обновляться на основе состояния ([code]Loading[/code], успех или error ). Тем не менее, пользовательский интерфейс показывает только состояние загрузки и не переходит на успех или ошибку . Даже когда я отключаю Интернет, пользовательский интерфейс не показывает сообщение об ошибке или защитывание.[code]@Composable internal fun BookScreen( onBackPressed: () -> Unit, viewModel: BooksViewModel = koinViewModel() ) { val uiState by viewModel.booksState.collectAsStateWithLifecycle() val snackBarHostState = remember { SnackbarHostState() }
BackHandler(onBack = onBackPressed)
Scaffold( snackbarHost = { SnackbarHost(snackBarHostState) } ) { contentPadding -> when (uiState) { is BooksUiState.Error -> { LaunchedEffect(key1 = uiState) { snackBarHostState.showSnackbar("Unknown Error") } } is BooksUiState.Loading -> { LoadingOverlay(isLoading = (uiState as BooksUiState.Loading).isLoading) {} } is BooksUiState.Success -> { BookContent( books = (uiState as BooksUiState.Success).books, contentPadding = contentPadding ) } } } } [/code] Это моя книга viewmodel : [code]class BooksViewModel(private val getBooksUseCase: GetBooksUseCase) : ViewModel() {
val booksState: StateFlow = getBooksFlow() .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5000), initialValue = BooksUiState.Loading(true) )
private fun getBooksFlow(): Flow = flow { val result = getBooksUseCase() result.onSuccess { books -> // instead of real books object I tested for mockBookList emit(BooksUiState.Success(books = mockBooksList)) }.onFailure { error -> emit(BooksUiState.Error(error = error)) } }.catch { error -> // Handle any unexpected exception during the flow execution emit(BooksUiState.Error(error = error)) }.onCompletion { // Ensure loading is set to false, even if cancelled or an error happens. emit(BooksUiState.Loading(isLoading = false)) }
val mockBooksList = listOf( BookApiModel( id = 1, title = "Book 1", price = 100, currencyCode = "USD", author = "Vivek" ), BookApiModel( id = 2, title = "Book 2", price = 100, currencyCode = "USD", author = "Vivek" ), BookApiModel( id = 3, title = "Book 3", price = 100, currencyCode = "USD", author = "Vivek" ), BookApiModel( id = 4, title = "Book 4", price = 100, currencyCode = "USD", author = "Vivek" ), BookApiModel( id = 5, title = "Book 5", price = 100, currencyCode = "USD", author = "Vivek" ) ) } < /code> Я проверил, что: < /p>
API работает нормально. < /li> Успех и состояния ошибки должны быть излучены. Успех [/code] или ошибка и только отображение состояния загрузки? Что может быть не так с моим государственным управлением, и как я могу это исправить?
Я работаю над приложением JetPack Compose, где я получаю данные книги с сервера, используя BooksViewModel . Пользовательский интерфейс должен обновляться на основе состояния ( Loading , успех или error ). Тем не менее, пользовательский интерфейс...
Я работаю над приложением JetPack Compose, где я получаю данные книги с сервера, используя BooksViewModel . Пользовательский интерфейс должен обновляться на основе состояния ( Loading , успех или error ). Тем не менее, пользовательский интерфейс...
У меня возникла проблема: пользовательский интерфейс списка не обновляется должным образом. Однако данные сохраняются правильно в общих настройках
Пример:
У меня есть ProfileViewModel , где я загружаю профиль пользователя, когда пользователь приземляется на экране. Чтобы достичь этого, я использую Statein , чтобы профиль был извлечен автоматически. /> call logoutapi.logout () .
У меня есть ProfileViewModel , где я загружаю профиль пользователя, когда пользователь приземляется на экране. Чтобы достичь этого, я использую Statein , чтобы профиль был извлечен автоматически. /> call logoutapi.logout () .