Chuleta rápida de Remember en Jetpack Compose
1. Básicos de estado
| Función | Descripción | Ejemplo rápido |
|---|---|---|
remember { … } |
Guarda el estado en recomposición mientras el composable esté en el árbol. | val count = remember { mutableStateOf(0) } |
rememberSaveable { … } |
Igual que remember, pero persiste en recreaciones de actividad (rotación, proceso). |
val count = rememberSaveable { mutableStateOf(0) } |
2. Corutinas y lambdas
| Función | Descripción | Ejemplo rápido |
|---|---|---|
rememberCoroutineScope() |
Devuelve un CoroutineScope ligado al ciclo de vida del composable. |
val scope = rememberCoroutineScope() |
rememberUpdatedState(value) |
Mantiene siempre la última versión de un valor dentro de efectos (LaunchedEffect, etc.). |
val onClick by rememberUpdatedState(newValue = action) |
3. Animaciones
| Función | Descripción | Ejemplo rápido |
|---|---|---|
rememberInfiniteTransition() |
Animaciones que se repiten indefinidamente. | val alpha by infinite.animateFloat(... ) |
rememberTransition(state) |
Transiciones entre estados definidos. | val transition = updateTransition(targetState, label="") |
rememberSplineBasedDecay() |
Animación tipo fling con decaimiento. | val decay = rememberSplineBasedDecay<Float>() |
4. Scroll y listas
| Función | Descripción | Ejemplo rápido |
|---|---|---|
rememberScrollState() |
Guarda la posición de scroll en Column / Row. |
val scroll = rememberScrollState() |
rememberLazyListState() |
Guarda el estado de scroll en LazyColumn/LazyRow. |
val listState = rememberLazyListState() |
rememberLazyGridState() |
Estado de scroll en LazyVerticalGrid o LazyHorizontalGrid. |
val gridState = rememberLazyGridState() |
rememberPagerState() |
Estado de un pager (HorizontalPager / VerticalPager). |
val pagerState = rememberPagerState() |
5. Gestos e interacción
| Función | Descripción | Ejemplo rápido |
|---|---|---|
rememberDraggableState(onDelta) |
Controla los desplazamientos en gestos de arrastre. | val dragState = rememberDraggableState { delta -> … } |
rememberSwipeableState(initialValue) |
Estado de un componente deslizable (ej: BottomSheet). |
val sheetState = rememberSwipeableState(0) |
rememberPullRefreshState(refreshing, onRefresh) |
Estado para pull-to-refresh. | val refreshState = rememberPullRefreshState(refreshing, { … }) |
rememberNestedScrollInteropConnection() |
Conexión de scroll con vistas clásicas Android. | val connection = rememberNestedScrollInteropConnection() |
6. Otros especializados
| Función | Descripción | Ejemplo rápido |
|---|---|---|
rememberSystemUiController() (Accompanist) |
Controla status bar y nav bar. | val controller = rememberSystemUiController() |
rememberInsetsPaddingValues() (Accompanist, deprecated) |
Padding según insets del sistema. | val padding = rememberInsetsPaddingValues() |
rememberHapticFeedback() |
Acceso al motor de vibración/háptica. | val haptic = LocalHapticFeedback.current |
rememberClipboardManager() |
Acceso al portapapeles del sistema. | val clipboard = LocalClipboardManager.current |
🎓 Ejemplo práctico integrando varios remember
1@Composable
2fun DemoRememberScreen() {
3 val count = rememberSaveable { mutableStateOf(0) }
4 val scrollState = rememberScrollState()
5 val scope = rememberCoroutineScope()
6 val transition = rememberInfiniteTransition()
7
8 val alpha by transition.animateFloat(
9 initialValue = 0f,
10 targetValue = 1f,
11 animationSpec = infiniteRepeatable(
12 animation = tween(1000),
13 repeatMode = RepeatMode.Reverse
14 )
15 )
16
17 Column(
18 modifier = Modifier
19 .fillMaxSize()
20 .verticalScroll(scrollState),
21 horizontalAlignment = Alignment.CenterHorizontally
22 ) {
23 Text("Contador: ${count.value}", modifier = Modifier.alpha(alpha))
24
25 Button(onClick = {
26 scope.launch { count.value++ }
27 }) {
28 Text("Incrementar")
29 }
30 }
31}