Filosofia: CrossFly vs. declarativo-reativo
Antes das tabelas de tradução por origem, o contrato mental que vale para todas.
A única mudança que importa
Frameworks declarativo-reativos (Flutter, Compose, SwiftUI, React Native) descrevem a UI como função do estado e a reconstroem quando o estado muda. CrossFly é imperativo e orientado a objetos: você cria objetos
Componentmutáveis uma vez (emonShow()), guarda referências, altera propriedades e chamarepaint().
Não há build() reexecutado, não há setState, não há async/await. O ponto em comum com
Flutter/Compose: tudo é renderizado via GPU (OpenGL/WebGL), sem widgets nativos — a aparência é
idêntica em todas as plataformas.
O de-para dos 4 pilares
| No seu framework | No CrossFly |
|---|---|
build()/body reexecutado |
monta uma vez em onShow(); depois você muta objetos |
setState/@State/useState → rebuild |
mudar campo + repaint() (+ setValidLayout(false) se o tamanho mudou) |
| widgets de layout aninhados | add(valor, comp) — LAY_AUTO(0f) / LAY_FILL(-1f) / fração |
async/await/Future |
Thread + Component.onUI(...) (threading explícito) |
O contador, os dois modelos
// Declarativo-reativo (pseudo): o estado muda → a UI é reconstruída sozinha.
// CrossFly: você 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)); }); // muta + repinta
add(LAY_AUTO, mais);
}
}
Armadilhas universais (valem para toda origem)
- Guarde referências aos componentes que você vai atualizar (campos da
Window) — não há como “reencontrá-los” por reconstrução. - Padding/margem não são widgets: são
ingap/outgapno estilo do componente. - Sem hot-reload — é Java compilado (no desktop o ciclo é rápido; ver platforms).
- i18n de textos é manual — não há catálogo de strings embutido (ver i18n).
- Cores são
intARGB0xAARRGGBB— não há classeColor(useUIConstants/ColorUtils).
Escolha sua origem
Flutter · Jetpack Compose · SwiftUI · React Native · TotalCross/SuperWaba
Veja também
- Conceito: Estado e fluxo de dados · Tudo é um Component
Esta página foi útil?Obrigado pelo feedback!