环境配置
API介绍
Navigation3包含重要配置导航入口NavDisplay,应用于全局配置页面导航、页面堆栈管理、页面切换动画管理等等,具体函数声明代码如下(链接:NavDisplay函数源码位置):
@Composable
public fun <T : Any> NavDisplay(
backStack: List<T>,
modifier: Modifier = Modifier,
contentAlignment: Alignment = Alignment.TopStart,
onBack: () -> Unit = {
if (backStack is MutableList<T>) {
backStack.removeLastOrNull()
}
},
entryDecorators: List<NavEntryDecorator<T>> =
listOf(rememberSaveableStateHolderNavEntryDecorator()),
sceneStrategy: SceneStrategy<T> = SinglePaneSceneStrategy(),
sizeTransform: SizeTransform? = null,
transitionSpec: AnimatedContentTransitionScope<Scene<T>>.() -> ContentTransform =
defaultTransitionSpec(),
popTransitionSpec: AnimatedContentTransitionScope<Scene<T>>.() -> ContentTransform =
defaultPopTransitionSpec(),
predictivePopTransitionSpec:
AnimatedContentTransitionScope<Scene<T>>.(
@NavigationEvent.SwipeEdge Int
) -> ContentTransform =
defaultPredictivePopTransitionSpec(),
entryProvider: (key: T) -> NavEntry<T>,
)
- 函数基础参数说明
backStack是一个List集合,用于管理页面堆栈。对集合进行增删查改之后,Nav3会自动的切换页面onBack系统返回键回调函数entryProvider用于声明堆栈中的Key与页面间的映射关系
案例
要从 RouteA 导航到 RouteB,我们只需将 RouteB 的实例添加到返回栈中。该 id 作为参数传递给 RouteBdata 类。
private data object RouteA
private data class RouteB(val id: String)
class BasicActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setEdgeToEdgeConfig()
super.onCreate(savedInstanceState)
setContent {
val backStack = remember { mutableStateListOf<Any>(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")
}
}
}
)
}
}
}