Android

A Solução: Versões Lambda de Modificadores

O artigo explica como as versões lambda de Modifier.offset e Modifier.graphicsLayer em Jetpack Compose permitem que a mudança do estado seja lida apenas durante a fase de Layout ou Drawing, evitando a recompilação desnecessária da composição. Isso resulta em melhorias significativas na performance para componentes animados como cartões arrastáveis na tela.

Compartilhar
Medium

💡A Solução: Versões Lambda de Modificadores

Ambos Modifier.offset e Modifier.graphicsLayer têm versões lambda:

@Composable
fun SwipeableCard(state: SwipeableCardState) {
Card(
modifier = Modifier
.offset {
IntOffset(
x = state.offset.x.roundToInt(),
y = state.offset.y.roundToInt()
)
}
.graphicsLayer {
scaleX = state.scaleFactor
scaleY = state.scaleFactor
}
)
}

A diferença é sutil, mas significativa. As versões lambda adiam a leitura do estado. O Compose não lê state.offset durante a composição — ele o lê mais tarde, na fase de Layout ou Drawing, dentro da lambda.

Isso significa que quando o deslocamento muda:

✅ O Compose pula a composição inteiramente
✅ O Compose pula o Layout (para graphicsLayer)
✅ Apenas o Drawing é executado

Para uma carta sendo arrastada pela tela a 60–120fps, isso é uma vitória significativa.

Por Que Isso Funciona?

O Compose rastreia leituras de estado por escopo. Quando você lê um valor de estado, o Compose registra o escopo atual como observador desse estado. Quando o estado muda, apenas o escopo registrado re-executa.

Modificadores lambda criam seu próprio escopo apertado, apenas o corpo da lambda. Então quando o estado de deslocamento muda, apenas essa lambda é re-executada, não toda a árvore composta acima dela.

Fonte original

Conteúdo traduzido e adaptado pela redação do Notícias Mobile. Confira também a matéria na fonte original.

Leia a matéria completa