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