我在这一行得到一个错误->
selectedScreen() = navItem
字符串
下面是完整的函数:
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ScaffoldView(
isScaffold: ()-> Boolean, selectedScreen: () -> NavItem
){
Scaffold(
topBar = {
TopAppBar(
modifier = Modifier.fillMaxWidth(),
title = {
when(selectedScreen().route){
}
},
colors = TopAppBarDefaults.smallTopAppBarColors(
containerColor = Color.LightGray
)
)
},
bottomBar = {
NavigationBar(
modifier = Modifier.height(50.dp),
containerColor = Color.White
) {
listOfNavItems.forEach{navItem ->
NavigationBarItem(
icon = {
Icon(imageVector = navItem.icon, contentDescription = null)
},
selected = navItem == selectedScreen(),
onClick = {
selectedScreen() = navItem
},
colors = NavigationBarItemDefaults.colors(
selectedIconColor = Color.White,
indicatorColor = Color.Black
)
)
}
}
}
) {paddingValues ->
Box(modifier = Modifier.padding(paddingValues)){
}
}
}
型
下面是我如何调用函数:
ScaffoldView(
isScaffold = {isScaffold.value},
selectedScreen = {selectedScreen}
)
型
是否可以像可变值一样更新lambda值?
另外,如果你想知道为什么我使用lambda而不是可变的瓦尔,那是因为我看到google推荐lambda更高效。
1条答案
按热度按时间wlzqhblo1#
selectedScreen
是一个不带参数的lambda表达式,它返回一个NavItem
,它的值不能从ScaffoldView
中更改。如果你想在它的onClick
中设置navItem
,你必须在你的composable中添加另一个函数param:字符串
然后把它叫做
型
并在父组合中实现它
型