簡體   English   中英

使用Kotlin密封類路由到不同的屏幕

[英]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
        }
    }
})

我的問題是,這是一個好主意還是總體上好的做法? 提前致謝。

編輯:

只是真的想再次使它活着,也許找到一些答案。

關於sealed class -很好。 我上傳了我們的使用簡單路由簡單路由器方法。 您還可以使用非常有趣的Kompass路由器進行基准測試。

除了實現之外,這里的區別在於路由責任-在我介紹的Presenter/ViewModel解決方案中可以訪問Router並對其調用調用navigate(..) -在您的方法中,您使用Rx/LiveData並讓您的View處理它,但這僅僅是它上面的另一個邏輯層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM