背景
Nav3将导航堆栈集合交由开发者设置,在一些极端条件下,比如Activity配置更改、应用进程被杀死,均可能会导致设置堆栈数据的丢失。为了防止这种意外,则需要为堆栈进行持久化配置
解决方案
-
rememberNavBackStack具体使用如下,就不过多阐述。
@Serializable
private data object RouteA : NavKey
@Serializable
private data class RouteB(val id: String) : NavKey
class BasicSaveableActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setEdgeToEdgeConfig()
super.onCreate(savedInstanceState)
setContent {
val backStack = rememberNavBackStack(RouteA)
NavDisplay(
backStack = backStack,
onBack = { backStack.removeLastOrNull() },
entryProvider = { key ->
when (key) {
is RouteA -> NavEntry(key) {
ContentGreen("Welcome to Nav3") {
Button(onClick = dropUnlessResumed {
backStack.add(RouteB("123"))
}) {
Text("Click to navigate")
}
}
}
is RouteB -> NavEntry(key) {
ContentBlue("Route id: ${key.id} ")
}
else -> {
error("Unknown route: $key")
}
}
}
)
}
}
}