Почему обновление состояния не отражается на AndroidView

#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) {  ...  }  }  }, )