#android #kotlin #android-jetpack-compose
Вопрос:
В Jetpack Compose у меня есть AndroidView
слушатель, который считывает состояние, переданное следующим образом:
@Composable fun Scanner( state: ScannerState, modifier: Modifier = Modifier, ) { AndroidView( modifier = modifier, factory = { context -gt; ScannerView(context).apply { onButtonClicked = { if (state.isLoading) lt;-- HERE I READ THE STATE ... } } } },
Проблема возникает, когда состояние обновляется и представление перекомпозируется. Если onButtonClicked
после этого обратный вызов вызывается снова, он сохраняет начальное состояние и не считывает последнее обновленное состояние, полученное этой функцией.
Ответ №1:
factory
вызывается только один раз, когда создается представление. Вот почему лямбда захватывает только начальное состояние.
Чтобы передать обновленное состояние, вам нужно использовать update
аргумент, подобный этому:
AndroidView( modifier = modifier, factory = { context -gt; ScannerView(context) }, update = { view view.onButtonClicked = { if (state.isLoading) { ... } } }, )