15

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")
}

1 Answer 1

20

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)
}
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for answer. In sealed class, object instanceName : className() statement is singleton pattern. And is that mean screen instance must defined once ?
@SeungUnOh yes, because you have only one navigation route which accepts an argument parameter, not many routes with hardcoded argument.
exactly the answer i was looking for :D

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.