En Jetpack Compose, tengo un AndroidView con un oyente que lee el estado pasado así:
@Composable fun Scanner( state: ScannerState, modifier: Modifier = Modifier, ) { AndroidView( modifier = modifier, factory = { context -> ScannerView(context).apply { onButtonClicked = { if (state.isLoading) <-- HERE I READ THE STATE ... } } } }, El problema viene cuando se actualiza el estado y se recompone la vista. Si la devolución de llamada onButtonClicked se vuelve a invocar después de eso, conserva el estado inicial y no lee el último estado actualizado que recibió esta función.
factory se llama solo una vez, cuando se crea la vista. Es por eso que la lambda captura solo el estado inicial.
Para pasar un estado actualizado, debe usar un argumento de update , como este:
AndroidView( modifier = modifier, factory = { context -> ScannerView(context) }, update = { view view.onButtonClicked = { if (state.isLoading) { ... } } }, )