Pular para conteúdo

rememberCoroutineScope

rememberCoroutineScope é uma função Composable que retorna um CoroutineScope vinculada ao ponto da composição onde é chamada. O escopo será cancelado quando a chamada sair da composição.

Diferente da LaunchedEffect que só pode ser usada dentro de uma outra função Composable por ser uma função Composable, rememberCoroutineScope é útil para iniciar uma coroutine fora de uma Composable, mas com escopo para que seja cancelada automaticamente ao sair da composição.

Ele é bem comum de ser utilizado, tanto que já o utilizamos uma vez quando aprendemos sobre o componente Navigation Drawer. Um outro exemplo que podemos ver sua utilização é na implementação de uma Pager. No código abaixo, não podemos chamar pagerState.animateScrollToPage(5) no onClick do Button(), pois animateScrollToPage() é uma suspend function. Para isso podemos recorrer ao rememberCoroutineScope.

@OptIn(ExperimentalFoundationApi::class)
@Composable
private fun MyHorizontalPager() {
    val pagerState = rememberPagerState(pageCount = { 10 })
    Column {
        HorizontalPager(state = pagerState) { page ->
            Text(
                text = "Página atual: $page",
                modifier = Modifier
                    .fillMaxWidth()
                    .height(100.dp)
            )
        }

        val coroutineScope = rememberCoroutineScope()
        Button(
            onClick = {
                // animateScrollToPage() é uma suspend function
                coroutineScope.launch {
                    pagerState.animateScrollToPage(5)
                }
            },
            modifier = Modifier.align(Alignment.CenterHorizontally)
        ) {
            Text(text = "Pular para a página 5")
        }
    }
}

🔗 Conteúdos auxiliares: