Code: Select all
Loading
Code: Select all
@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: Select all
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>
Ich habe verifiziert, dass: < /p>
Die API funktioniert gut. Erfolg