[英]Using Kotlin Sealed Classes for routing to different screens
創建這樣的密封類是一個好主意:
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
}
}
})
我的問題是,這是一個好主意還是總體上好的做法? 提前致謝。
編輯:
只是真的想再次使它活着,也許找到一些答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.