0

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

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

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

@Composable()
fun composableFunction() {
}

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

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

4

1 回答 1

1

首先要注意的Composable function must 只有 be called inside another Composable function.
现在回到您的问题,接受函数的 onClick 参数不是可组合函数。所以在 a 中调用@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 组合。而 onClick 是在 UI 组合完成后调用。所以你需要在 onClick 发生后使用状态来重构 UI 并加载可组合的函数。

于 2020-01-19T08:26:58.400 回答