Vindo do Jetpack Compose
No Compose (Kotlin declarativo) a UI recompõe quando o estado observável muda. No CrossFly você monta uma vez e muta. Leia primeiro a filosofia.
Tabela de tradução
| Jetpack Compose | CrossFly |
|---|---|
@Composable fun |
método que monta uma vez em onShow() |
remember { mutableStateOf(...) } + recomposição |
campo + repaint() (sem recomposição) |
Column / Row / Box |
VerticalLayout / HorizontalLayout / RelativeLayout |
Modifier.weight(1f) |
add(LAY_FILL, c) (-1f) |
Modifier.padding(...) |
ingap no estilo |
LazyColumn |
VirtualListView |
Text |
Label |
Button |
Button |
Scaffold / TopAppBar |
Window (+ TabBar) |
NavController / NavHost |
pilha de Window (show() / hide()) |
ViewModel + StateFlow |
ViewModel manual + callback (sem coleta de fluxo) |
LaunchedEffect / coroutines |
Thread + Component.onUI(...) |
Color(0xFF...) |
int 0xAARRGGBB (UIConstants / ColorUtils) |
Como era / como fica — o contador
// Compose: muda o state → recompõe sozinho
@Composable fun Contador() {
var n by remember { mutableStateOf(0) }
Column {
Text("$n")
Button(onClick = { n++ }) { Text("+") }
}
}
// CrossFly: guarda a referência e atualiza na mão
public class Contador extends Window {
private int n = 0;
private Label display;
@Override public void onShow() throws Exception {
super.onShow();
setLayout(new VerticalLayout());
add(LAY_AUTO, display = new Label("0"));
Button mais = new Button("+");
mais.onAction(c -> { n++; display.setText(String.valueOf(n)); }); // sem recomposição
add(LAY_AUTO, mais);
}
}
O ponto que mais surpreende
StateFlow/collectAsState não têm equivalente: o CrossFly não observa seu estado. Onde você
coletaria um fluxo, guarde o valor num campo e chame repaint() (ou um observe(Runnable) manual no
seu ViewModel — ver arquitetura de app).
Veja também
Esta página foi útil?Obrigado pelo feedback!