diff --git a/decompose/src/commonMain/kotlin/com/arkivanov/decompose/Ref.kt b/decompose/src/commonMain/kotlin/com/arkivanov/decompose/Ref.kt new file mode 100644 index 000000000..f4241f243 --- /dev/null +++ b/decompose/src/commonMain/kotlin/com/arkivanov/decompose/Ref.kt @@ -0,0 +1,4 @@ +package com.arkivanov.decompose + +@InternalDecomposeApi +class Ref(var value: T) diff --git a/extensions-compose-jetbrains/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/jetbrains/pages/Pages.kt b/extensions-compose-jetbrains/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/jetbrains/pages/Pages.kt index 76d5ff770..2d63e884b 100644 --- a/extensions-compose-jetbrains/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/jetbrains/pages/Pages.kt +++ b/extensions-compose-jetbrains/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/jetbrains/pages/Pages.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import com.arkivanov.decompose.ExperimentalDecomposeApi +import com.arkivanov.decompose.Ref import com.arkivanov.decompose.extensions.compose.jetbrains.subscribeAsState import com.arkivanov.decompose.hashString import com.arkivanov.decompose.router.pages.ChildPages @@ -90,7 +91,13 @@ fun Pages( { childPages.items[it].configuration.hashString() }, ) { pageIndex -> val item = childPages.items[pageIndex] - val page = remember(item.configuration) { item.instance } + + val pageRef = remember(item.configuration) { Ref(item.instance) } + if (item.instance != null) { + pageRef.value = item.instance + } + + val page = pageRef.value if (page != null) { pageContent(pageIndex, page) } diff --git a/extensions-compose-jetpack/src/main/java/com/arkivanov/decompose/extensions/compose/jetpack/pages/Pages.kt b/extensions-compose-jetpack/src/main/java/com/arkivanov/decompose/extensions/compose/jetpack/pages/Pages.kt index 7a98223ca..05659cc6b 100644 --- a/extensions-compose-jetpack/src/main/java/com/arkivanov/decompose/extensions/compose/jetpack/pages/Pages.kt +++ b/extensions-compose-jetpack/src/main/java/com/arkivanov/decompose/extensions/compose/jetpack/pages/Pages.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import com.arkivanov.decompose.ExperimentalDecomposeApi import com.arkivanov.decompose.InternalDecomposeApi +import com.arkivanov.decompose.Ref import com.arkivanov.decompose.extensions.compose.jetpack.subscribeAsState import com.arkivanov.decompose.hashString import com.arkivanov.decompose.router.pages.ChildPages @@ -92,7 +93,13 @@ fun Pages( { childPages.items[it].configuration.hashString() }, ) { pageIndex -> val item = childPages.items[pageIndex] - val page = remember(item.configuration) { item.instance } + + val pageRef = remember(item.configuration) { Ref(item.instance) } + if (item.instance != null) { + pageRef.value = item.instance + } + + val page = pageRef.value if (page != null) { pageContent(pageIndex, page) }