Хорошая идея - создавать запечатанные классы как таковые:
sealed class Route<out T: Any> {
data class ToRoute1<out T : Any>(val data: T) : Route<T>()
data class ToRoute2<out T : Any>(val data: T) : Route<T>()
data class ToRoute3<out T : Any>(val data: T) : Route<T>()
}
Таким образом, класс печати Route
определит все возможные места назначения, к которым текущий экран может «направиться». Так, например, LoginScreen может иметь следующий закрытый класс:
sealed class LoginRoute<out T: Any> {
data class ToSignUp<out T : Any>(val data: T) : LoginRoute<T>()
data class ToUserDetails<out T : Any>(val data: T) : LoginRoute<T>()
data class ToSomeOtherPossibleDestination<out T : Any>(val data: T) : LoginRoute<T>()
}
Теперь в ViewModel
я могу иметь:
val proceedToDestination = MutableLiveData<Event<LoginRoute>>()
тогда в представлении я мог просто наблюдать proceedToDestination
и делать следующее:
viewModel.proceedToDestination.observe(this, Observer { route ->
route?.consume()?.run {
when (route) {
LoginRoute.ToSignUp -> // TODO START SIGNUP
LoginRoute.ToUserDetails-> // TODO GO TO USER DETAILS SCREEN
LoginRoute.ToSomeOtherPossibleDestination-> // TODO GO TO OTHER POSSIBLE DESTINATIONS
}
}
})
Мой вопрос в том, является ли это хорошей идеей или хорошей практикой в целом? Заранее спасибо.
Редактировать:
Просто очень хочу оживить это снова и, возможно, найти ответы.
LoginRoute
сToSignUp
и т. Д.? - person tynn   schedule 13.02.2019