我使用的内容:
Kotlin,Jetpack Compose
我想做的事:
单击“登录”文本后,我希望将用户导航到登录表单
我目前拥有的:
- MainActivity.kt*
class MainActivity : ComponentActivity() {
private val viewModel: MainActivityViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
installSplashScreen().apply {
setKeepOnScreenCondition {
viewModel.isLoading.value
}
}
setContent {
RestaurantioTheme {
Surface(Modifier.fillMaxSize()) {
val navController = rememberNavController()
Scaffold(
content = {padding ->
Column(
modifier = Modifier.padding(padding)
) {
Navigation(navController = navController)
}
},
bottomBar = {
BottomNavigationBar(
items = listOf(
BottomNavItem(
name = "Home",
route = "home",
icon = Icons.Outlined.Home
),
BottomNavItem(
name = "Orders",
route = "orders",
icon = Icons.Outlined.ShoppingBag
),
BottomNavItem(
name = "Map",
route = "map",
icon = Icons.Outlined.Map
),
BottomNavItem(
name = "Profile",
route = "profile",
icon = Icons.Outlined.Person
),
),
navController = navController,
onItemClick = {
navController.navigate(it.route) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
)
}
)
}
}
}
}
}
- BottomNav.kt*
@Composable
fun Navigation (navController: NavHostController) {
NavHost(navController = navController, startDestination = "home" ) {
composable("home") {
HomeScreen()
}
composable("orders") {
OrdersScreen()
}
composable("map") {
MapScreen()
}
composable("profile") {
ProfileScreen()
}
composable("login") {
MapScreen()
}
}
}
我尝试过的:
在我的ProfileScreen()Composable中,我有
ClickableText(
AnnotatedString("Log In"),
onClick = {
})
但我无法导航到登录屏幕。我试过这样的方法:
val navController = rememberNavController()
Navigation(navController)
ClickableText(
AnnotatedString("Log In"),
onClick = {
navController.navigate("login")
})
但是它并没有像预期的那样工作,因为我在ProfileScreen上面有HomeScreen(开始屏幕),在单击LogIn文本之后,我有这个“临时”MapScreen。
我知道我做错了什么,但我刚刚开始学习编写,我不能真正理解嵌套导航的导航文档,我认为应该在这里使用。
如果有帮助的话,下面是ProfileScreen Composable的开始,也许我必须在那里传递一些参数。
@Composable
fun ProfileScreen(viewModel: AuthenticationViewModel = androidx.lifecycle.viewmodel.compose.viewModel()) {
...
}
1条答案
按热度按时间2hh7jdfx1#
您可以将函数作为参数添加到ProfileScreen,并将此函数用于onClick事件。
在Navigation组合中,您可以将函数添加到ProfileScreen组合中,如下所示