Jetpack撰写AppBarIcon抱怨“调用@Composable函数的函数必须标记为@Composable”

时间:2020-01-19 06:15:48

标签: android kotlin android-jetpack-compose

我用jetpack编写了AppBarIcon元素,但是出现了错误: 调用@Composable函数的函数必须标记为@Composable“ 当我在onclick兰巴上调用可组合函数时。这是代码:

class testActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent { AppBarIcon(Image(10, 10) ) {
                composableFunction()
            }
        }
    }
} 

@Composable()
fun composableFunction() {
}

这是一个真正的问题,因为我在运行时遇到了异常

是我想念的东西还是真正的错误?

1 个答案:

答案 0 :(得分:1)

首先要注意的是Composable function must be called inside another Composable function
现在回到您的问题,接受该函数的onClick参数不是可组合函数。因此,无法在@Composable中调用onClick函数,因此会引发错误Functions which invoke @Composable functions must be marked with the @Composable
解决此问题的代码。

class testActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContent {
        var loadView = +state { false }
        Column {
            AppBarIcon(+imageResource(R.drawable.dashboard)) {
                loadView.value = true
            }
            Text("Hey")
            if (loadView.value)
                composableFunction()
        }
    }
  }
}
@Composable()
fun composableFunction() {
    Text("appbar content")
}

原因是onClick不可组合:同时调用所有Composable函数可完全构成UI。而在组合好UI之后会调用onClick。因此,需要在onClick发生后使用状态来重新构成UI并加载可组合功能。