Modellare lo stato dell'interfaccia con le sealed class
Applichi le sealed class per rappresentare gli stati dell'interfaccia Loading, Success ed Error.
Modellare lo stato dell'interfaccia con le sealed class è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.
Il problema dello stato dell'interfaccia utente
Il classico inferno dei valori booleani
// Fragile: isLoading=true AND hasError=true is invalid
var isLoading = false
var hasError = false
var data: List<Item>? = null
// 8 combinations, most of which are invalid!Stato sealed: solo stati validi
sealed class UiState<out T>
object Loading : UiState<Nothing>()
data class Success<T>(val data: T) : UiState<T>()
data class Error(val message: String, val retryable: Boolean = true) : UiState<Nothing>()
object Empty : UiState<Nothing>()Rendering in base allo stato
fun render(state: UiState<List<Item>>) = when (state) {
Loading -> showProgressBar()
is Success -> showItems(state.data)
is Error -> showError(state.message, state.retryable)
Empty -> showEmptyView()
}Emissione degli stati dal ViewModel
class ItemViewModel : ViewModel() {
private val _state = MutableStateFlow<UiState<List<Item>>>(Loading)
val state: StateFlow<UiState<List<Item>>> = _state
fun loadItems() = viewModelScope.launch {
_state.value = Loading
_state.value = try {
Success(repository.getItems())
} catch (e: Exception) {
Error(e.message ?: "Unknown error")
}
}
}Composizione degli stati con contenuto incorporato
fun <T> loading(): UiState<T> = Loading
fun <T> success(data: T): UiState<T> = Success(data)
fun <T> error(msg: String): UiState<T> = Error(msg)Esempio di stato della paginazione
sealed class PageState
object Idle : PageState()
object FirstLoad : PageState()
data class Content(val items: List<Item>, val hasMore: Boolean) : PageState()
data class LoadingMore(val items: List<Item>) : PageState()
data class Error(val items: List<Item>?, val msg: String) : PageState()Trasformazione dello stato
fun <T, R> UiState<T>.mapData(transform: (T) -> R): UiState<R> = when (this) {
is Success -> Success(transform(data))
is Error -> this
Loading -> Loading
Empty -> Empty
}Test con stati sealed
@Test
fun testLoadingState() {
viewModel.loadItems()
assertEquals(Loading, viewModel.state.value)
}
@Test
fun testSuccessState() {
viewModel.setData(listOf(item))
assert(viewModel.state.value is Success)
}Stato combinato o più flussi
// Fragile: two flows must stay in sync
val loading = MutableStateFlow(false)
val error = MutableStateFlow<String?>(null)
// Clean: one sealed state
val state = MutableStateFlow<UiState<List<Item>>>(Loading)Aggiunta di metadati agli stati
data class Error(
val message: String,
val code: Int = 0,
val retryable: Boolean = true,
val timestamp: Long = System.currentTimeMillis()
) : UiState<Nothing>()Verifica rapida
Riepilogo
Domande Frequenti
La lezione «Modellare lo stato dell'interfaccia con le sealed class» è gratuita?
Sì — il testo completo di «Modellare lo stato dell'interfaccia con le sealed class» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.
Cosa imparerò in «Modellare lo stato dell'interfaccia con le sealed class»?
Applichi le sealed class per rappresentare gli stati dell'interfaccia Loading, Success ed Error. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Kotlin Academy?
Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Modellare lo stato dell'interfaccia con le sealed class»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?
Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- sealed class e sealed interface: quando usare ciascuna
- when esaustivo con gerarchie sealed
- Modellare lo stato dell'interfaccia con le sealed class
- Annidare e combinare gerarchie sealed