Bug with PopUpTo-Functionality
sawil314 opened this issue · comments
Hi,
I think there is a Bug if you use navigation with PopUpTo, I get an error: "java.lang.IllegalArgumentException: Key 2-screen1 was used multiple times " when I try to navigate twice to the same Scene if it is Poped Up before.
code to reproduce:
package com.example.viewmodel100lines
import android.os.Bundle
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.example.viewmodel100lines.ui.theme.ViewModel100LinesTheme
import moe.tlaster.precompose.lifecycle.PreComposeActivity
import moe.tlaster.precompose.lifecycle.setContent
import moe.tlaster.precompose.navigation.NavHost
import moe.tlaster.precompose.navigation.NavOptions
import moe.tlaster.precompose.navigation.PopUpTo
import moe.tlaster.precompose.navigation.rememberNavigator
class MainActivity : PreComposeActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ViewModel100LinesTheme {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) {
App()
}
}
}
}
}
@Composable
fun App() {
val navigator = rememberNavigator()
MaterialTheme {
NavHost(
navigator = navigator,
initialRoute = "screen1"
) {
scene(route = "screen1") {
Greeting1({ navigator.navigate("screen1") }, { navigator.navigate("screen2") })
}
scene(route = "screen2") {
Greeting2({navigator.navigate("screen1", NavOptions(popUpTo = PopUpTo("screen1"))) })
}
}
}
}
@Composable
fun Greeting1(to1: () -> Unit, to2: () -> Unit, modifier: Modifier = Modifier) {
Column{
Button(
onClick = to1
) {
Text(
text = "ToScreen1",
modifier = modifier
)
}
Button(
onClick = to2
) {
Text(
text = "ToScreen2",
modifier = modifier
)
}
}
}
@Composable
fun Greeting2(onClick: () -> Unit, modifier: Modifier = Modifier) {
Button(
onClick= onClick
){
Text(
text = "Screen1",
modifier = modifier
)
}
}
Click:
To Screen2, Screen1, ToScreen1
@Tlaster still got the same error in my app even after bumping the version to 1.5.4
The next version which contains the fix will be 1.5.5, please wait for the release.