为什么状态更新没有反映在 AndroidView 上

Vic*_*cia 5 android kotlin android-jetpack-compose

在 Jetpack Compose 中,我有一个AndroidView监听器,它读取传递的状态,如下所示:

@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   
                        ...
                    }
                }
            }
        },
Run Code Online (Sandbox Code Playgroud)

当状态更新和视图重构时就会出现问题。如果onButtonClicked此后再次调用回调,它将保留初始状态,并且不会读取该函数收到的最后更新状态。

Phi*_*hov 4

factory仅在创建视图时被调用一次。这就是 lambda 仅捕获初始状态的原因。

要传递更新的状态,您需要使用update参数,如下所示:

AndroidView(
    modifier = modifier,
    factory = { context ->
        ScannerView(context)
    },
    update = { view 
        view.onButtonClicked = {
            if (state.isLoading) {
                ...
            }
        }
    },
)
Run Code Online (Sandbox Code Playgroud)