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

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?