Код: Выделить всё
@Composable
fun AndroidViewContainer(modifier: Modifier = Modifier, int: () -> Int) {
int() // for causing recomposition
var view: View? = null
SideEffect {
println("Log sideeffect $view")
}
DisposableEffect(Unit) {
onDispose {
println("Log detached $view")
}
}
AndroidView(
modifier = modifier,
factory = { context ->
View(context).also {
println("Log factory")
view = it
}
},
update = {
println("Log: $view")
}
)
}
Это верно для SideEffect или update, они получают нулевое значение. Но когда мы покидаем экран, вызывается onDispose, но не с нулевым значением, а с View, который был установлен в обратном вызове Factory.
И тут возникает вопрос: компилятор Compose каким-то образом оборачивает его для вызова onDispose? Почему только onDispose по-прежнему имеет это значение, а не другие побочные эффекты?
Обертка представления как var view: View? помните, что {mutableStateOf(null) заставит его работать так, как я ожидаю, но мне просто интересно, почему значение сохраняется для вызова onDispose.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ck-compose
Мобильная версия