kotlin 为什么TopAppBar navigationIcon不是可组合函数?

4c8rllxm  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(170)

我的IDE显示navigationIcon不是一个可组合函数。其他人也在做同样的事情。我得到了这个错误

@composable invocations can only happen from the context of an @composable function


@Composable
fun AppBar(onClick: () -> Unit){
    TopAppBar(
        title = "Princess World", 
        navigationIcon = { 
            IconButton(onClick = onClick) {
                Icon(imageVector = Icons.Default.Menu, contentDescription = null)
            } 
        },
    ) {}
}

我无法在标题和导航图标{}中使用可组合函数

@Composable
fun AppBar(onClick: () -> Unit){
   TopAppBar(title = { }, navigationIcon = { }) {

   }
}
ao218c7q

ao218c7q1#

您必须删除最后的{}

TopAppBar(
    title = { Text("Princess World") },
    navigationIcon = {
        IconButton(onClick = onClick) {
            Icon(imageVector = Icons.Default.Menu, contentDescription = null)
        }
    }
)

使用{}时,您尝试使用具有属性content: @Composable RowScope.() -> Unit的建构函式,但该建构函式没有titlenavigationIcon属性。

q35jwt9p

q35jwt9p2#

看起来有2个TopAppBar可组合,您必须使用其相应的参数正确调用它们。
这一个,

@Composable
fun AppBar(onClick: () -> Unit) {
    TopAppBar(
        title = { Text (text = "Princess World") },
        navigationIcon = {
            IconButton(onClick = onClick) {
                Icon(imageVector = Icons.Default.Menu, contentDescription = null)
            }
        }
    ) 
}

从API调用这个函数,

@Composable
    fun TopAppBar(
        title: @Composable () -> Unit,
        modifier: Modifier = Modifier,
        navigationIcon: @Composable (() -> Unit)? = null,
        actions: @Composable RowScope.() -> Unit = {},
        backgroundColor: Color = MaterialTheme.colors.primarySurface,
        contentColor: Color = contentColorFor(backgroundColor),
        elevation: Dp = AppBarDefaults.TopAppBarElevation
    ) { … }

或者这个,

TopAppBar {

}

从API调用

@Composable
fun TopAppBar(
    modifier: Modifier = Modifier,
    backgroundColor: Color = MaterialTheme.colors.primarySurface,
    contentColor: Color = contentColorFor(backgroundColor),
    elevation: Dp = AppBarDefaults.TopAppBarElevation,
    contentPadding: PaddingValues = AppBarDefaults.ContentPadding,
    content: @Composable RowScope.() -> Unit
) { … }

相关问题