xxfast / Decompose-Router

A Compose-multiplatform navigation library that leverage Decompose to create an API inspired by Conductor
https://xxfast.github.io/Decompose-Router/
221 stars 9 forks source link

Unable to create nested routers #53

Closed xxfast closed 11 months ago

xxfast commented 11 months ago

Running into a limitation of decompose or an issue with decompose-router implementation.

I have the following screen hierarchy

@Parcelize
sealed class Screen : Parcelable {
  data object A : Screen()
  data object B : Screen()
  data object C : Screen()
}

These are shown with RoutedContent on a screen like this

@Composable fun Screen(){
  val router: Router<Screen> = rememberRouter(Screen::class, stack = listOf(A))

  RoutedContent(router = router) { screen ->
    when (screen) {
      A -> AScreen()
      B -> BScreen()
      C -> CScreen()
  }
}

This works fine. However, whenever one or more of the screens contain a nested router like this

@Parcelize
sealed class NestedScreen : Parcelable {
  data object BA : Screen()
  data object BB : Screen()
  data object BC : Screen()
}

@Composable fun BScreen(){
  val nestedRouter: Router<MainScreens> = rememberRouter(NestedScreen::class, stack = listOf(NestedScreen.BA))
   ..
}

Upon returning from C ā†’ B, it throws

java.lang.IllegalStateException: Another supplier is already registered with the key: Screen.B.router
xxfast commented 11 months ago

Fixed in 0.5.0 šŸŽ‰