Francis Mariano
08/21/2023, 2:32 PMinterface RootComponent {
val childSlot: Value<ChildSlot<*, Child>>
sealed interface Child {
data class Main(val component: MainComponent) : Child
data class Scan(val component: ScanComponent) : Child
}
}
private val navigation = SlotNavigation<Configuration>()
private val slot =
childSlot(
source = navigation,
// initialConfiguration = ??????,
handleBackButton = true,
childFactory = ::createChild,
)
override val childSlot: Value<ChildSlot<*, RootComponent.Child>> = slot
private fun createChild(
configuration: Configuration,
componentContext: ComponentContext,
) : RootComponent.Child =
when (configuration) {
Configuration.Main -> RootComponent.Child.Main(mainComponent(componentContext))
Configuration.Scan -> RootComponent.Child.Scan(scanComponent(componentContext))
}
private sealed interface Configuration : Parcelable {
@Parcelize
data object Main : Configuration
@Parcelize
data object Scan : Configuration
}
I unable to create a childSlot with initialConfiguration. Can you help me???Francis Mariano
08/21/2023, 3:16 PMArkadii Ivanov
08/21/2023, 4:13 PMFrancis Mariano
08/21/2023, 6:24 PMFrancis Mariano
08/21/2023, 6:26 PMArkadii Ivanov
08/21/2023, 6:28 PMFrancis Mariano
08/21/2023, 6:32 PM@Composable
internal fun RootContent(rootComponent: RootComponent) {
// I want to add the view of slot here, but I am not able to do that (shame on me)
Children(
stack = rootComponent.childStack,
) {
when (val child = it.instance) {
is Main -> MainContent(child.component)
is Scan -> ScanContent(child.component)
}
}
}
Francis Mariano
08/21/2023, 6:36 PMFrancis Mariano
08/21/2023, 6:47 PMArkadii Ivanov
08/21/2023, 6:56 PMsubscribeAsState
extension function. See https://github.com/arkivanov/Decompose/blob/cb80388011d3334d2b2b01938513c364419cc8[…]/com/arkivanov/sample/shared/counters/counter/CounterContent.ktFrancis Mariano
08/21/2023, 7:06 PMval toolbar = rootComponent.toolbar.value.child
if ( toolbar is Child.Created) {
ToolbarTemp(toolbar.instance)
}
but the following is the correct
val toolbarSlot by rootComponent.toolbar.subscribeAsState()
toolbarSlot.child?.instance?.also {
ToolbarTemp(it)
}