Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

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 Component mutáveis uma vez (em onShow()), guarda referências, altera propriedades e chama repaint().

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/outgap no 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 int ARGB 0xAARRGGBB — não há classe Color (use UIConstants/ColorUtils).

Escolha sua origem

Flutter · Jetpack Compose · SwiftUI · React Native · TotalCross/SuperWaba

Veja também

Esta página foi útil?