Home > Software engineering >  Why use "sealed class" and make object in Navigation? (Kotlin Jetpack Compose)
Why use "sealed class" and make object in Navigation? (Kotlin Jetpack Compose)

Time:10-23

I've heard the most popular way to define screen and route is to use sealed class
But I can't understand intuitively that way.

first is Why use sealed class. there are other classes including just the default class.

The second is Why use object in sealed class.
I think the second question is have a relation to a singleton. But why screen should be a singleton?

this is code what I've seen

sealed class Screen(val route: String) {
    object Home: Screen(route = "home_screen")
    object Detail: Screen(route = "detail_screen")
}

CodePudding user response:

sealed class is a good choice when you have routes with arguments, like shown in Jetcaster Compose sample app:

sealed class Screen(val route: String) {
    object Home : Screen("home")
    object Player : Screen("player/{episodeUri}") {
        fun createRoute(episodeUri: String) = "player/$episodeUri"
    }
}

In case when you don't have arguments in any of your routes, you can use enum class instead, like shown in Owl Compose sample app:

enum class CourseTabs(
    @StringRes val title: Int,
    @DrawableRes val icon: Int,
    val route: String
) {
    MY_COURSES(R.string.my_courses, R.drawable.ic_grain, CoursesDestinations.MY_COURSES_ROUTE),
    FEATURED(R.string.featured, R.drawable.ic_featured, CoursesDestinations.FEATURED_ROUTE),
    SEARCH(R.string.search, R.drawable.ic_search, CoursesDestinations.SEARCH_COURSES_ROUTE)
}
  • Related