Прежде всего обратите внимание, что 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 вызываются одновременно для полного создания пользовательского интерфейса. Когда onClick вызывается позже после того, как пользовательский интерфейс уже составлен. Поэтому вам нужно использовать состояние, чтобы перекомпоновывать пользовательский интерфейс и загружать компонуемую функцию после появления onClick.