Sealed classes in Kotlin provide a way to define restricted class hierarchies, which can be beneficial for managing UI events or state changes in a structured manner. When using sealed classes, you can represent different states or events explicitly, making your code more readable and maintainable. This approach is particularly useful in Jetpack Compose when dealing with various UI interactions, allowing you to handle each case effectively and ensuring type safety.
sealed class UiEvent {
object OnButtonClick : UiEvent()
data class OnTextChange(val newText: String) : UiEvent()
object OnSubmit : UiEvent()
}
// Example usage in a ViewModel
class MyViewModel : ViewModel() {
private val _eventFlow = MutableSharedFlow()
val eventFlow = _eventFlow.asSharedFlow()
fun onButtonClick() {
viewModelScope.launch {
_eventFlow.emit(UiEvent.OnButtonClick)
}
}
fun onTextChange(newText: String) {
viewModelScope.launch {
_eventFlow.emit(UiEvent.OnTextChange(newText))
}
}
fun onSubmit() {
viewModelScope.launch {
_eventFlow.emit(UiEvent.OnSubmit)
}
}
}