Isaac Udy
12/11/2019, 11:27 PMclass HelloWorldRoute(...)
: Route
class HelloWorldViewModel :
ViewModel<HelloWorldRoute>() { ... }
@Composable
fun HelloWorldScreen(
viewModel: HelloWorldViewModel
) { ... }
val helloWorldRouter = router(
HelloWorldViewModel::class
) {
withView(::HelloWorldScreen)
...
}
MyActivity.routerController = RouterController(
helloWorldRouter,
...
)
MyActivity.onCreate() {
...
routerController.open(HelloWorldRoute(...))
setContent {
MaterialTheme {
RouterControllerContainer(
routerController
)
}
}
}
Max Oliynick
12/12/2019, 9:28 AMIsaac Udy
12/12/2019, 10:22 AMMax Oliynick
12/12/2019, 11:27 AMIsaac Udy
12/12/2019, 11:32 AMMax Oliynick
12/12/2019, 11:34 AMval helloWorldRouter = router(
HelloWorldViewModel::class
) {
withView(::HelloWorldScreen)
...
}
class AppState(
val screens: Stack<Screen>
)
inline fun <reified T : Screen> State.updateScreen(
id: ScreenId,
how: (T) -> T
): State = ...
fun State.swapScreens(
i: Int,
j: Int = screens.lastIndex
)State {
...
}
fun State.pushScreen(
screen: Screen
)State = ...
fun State.popScreen(): State = ...
private fun Activity.render(screen: Screen, onMessage: (Message) -> Unit) =
setContent {
App(screen, onMessage) {
Screen(screen, onMessage)
}
}
Isaac Udy
12/12/2019, 9:44 PMval a = root.open(HelloWorldRoute("1"))
val b = a.open(HelloWorldRoute("2"))
"a" and "b" would be unique, and in this case, we would render the screen for HelloWorldRoute("2") and when we go back from that screen, we'd be back at the screen for HelloWorldRoute("1"). Even if HelloWorldRoute was an object, we would still end up with two unique screens.