Android Studio 更新lamda值时出现“预期变量”错误

ocebsuys  于 11个月前  发布在  Android
关注(0)|答案(1)|浏览(123)

我在这一行得到一个错误->

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更高效。

wlzqhblo

wlzqhblo1#

selectedScreen是一个不带参数的lambda表达式,它返回一个NavItem,它的值不能从ScaffoldView中更改。如果你想在它的onClick中设置navItem,你必须在你的composable中添加另一个函数param:

fun ScaffoldView(
    isScaffold: () -> Boolean,
    selectedScreen: () -> NavItem,
    selectScreen: (NavItem) -> Unit,
){

字符串
然后把它叫做

onClick = {
                             selectScreen(navItem)
                        }


并在父组合中实现它

ScaffoldView(
        isScaffold = { isScaffold.value },
        selectedScreen = { selectedScreen },
        selectScreen = { navItem ->
            selectedScreen = navItem
        }
    )

相关问题