Pular para conteúdo

Disposable Effect

Para side effects que precisam ser limpos após uma mudança nos valores das keys ou se o Composable sair da composição, use DisposableEffect. Ele é um pouco semelhante ao LaunchedEffect, que aceita um número variável de keys e reinicia o efeito caso o valor de uma das keys mude, porém, possui uma cláusula onDispose final obrigatória que pode ser usada para fazer a limpeza, liberar recursos, remover eventos de listeners etc.

Veja um exemplo simples retirado da própria documentação oficial, que pode ser usado para enviar eventos analíticos com base em eventos do Lifecycle usando um LifecycleObserver:

@Composable
private fun LifecycleObserver(
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    onStart: () -> Unit,
    onStop: () -> Unit,
) {
    // Atualiza com segurança os lambdas atuais quando um novo é fornecido
    val currentOnStart by rememberUpdatedState(onStart)
    val currentOnStop by rememberUpdatedState(onStop)

    // Se `lifecycleOwner` mudar, descarta e reinicia o efeito
    DisposableEffect(lifecycleOwner) {
        val observer = LifecycleEventObserver { _, event ->
            if (event == Lifecycle.Event.ON_START) {
                currentOnStart()
            } else if (event == Lifecycle.Event.ON_STOP) {
                currentOnStop()
            }
        }

        // Adiciona o observer ao ciclo de vida
        lifecycleOwner.lifecycle.addObserver(observer)

        // Quando o efeito deixar a composição, remove o observer
        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

🔗 Conteúdos auxiliares: