Vindo do SwiftUI
No SwiftUI o body é computado e a view se invalida quando @State muda. No CrossFly você monta
uma vez e muta. Leia primeiro a filosofia.
Tabela de tradução
| SwiftUI | CrossFly |
|---|---|
View / body computado |
UI montada uma vez em onShow() |
@State / @Binding / @ObservedObject |
campos + repaint() (sem invalidação automática) |
VStack / HStack / ZStack |
VerticalLayout / HorizontalLayout / RelativeLayout |
Spacer() |
Gap / frações (o Spacer do framework foi removido) |
.padding() |
ingap no estilo |
List |
VirtualListView |
Text |
Label |
Button |
Button |
NavigationStack / .sheet |
pilha de Window / ActionSheet |
.alert |
Alert |
async / await / Task |
Thread + Component.onUI(...) |
Color |
int 0xAARRGGBB |
Diferença de destino
SwiftUI roda só em Apple. O CrossFly é uma base Java que roda em iOS e Android, Desktop e Web — o mesmo código de tela em todos (ver plataformas).
Como era / como fica — formulário
// SwiftUI
struct LoginView: View {
@State private var email = ""
var body: some View {
VStack {
TextField("E-mail", text: $email)
Button("Entrar") { entrar(email) }
}
}
}
// CrossFly
public class LoginScreen extends Window {
@Override public void onShow() throws Exception {
super.onShow();
setLayout(new VerticalLayout());
TextField email = new TextField().caption("E-mail");
add(LAY_AUTO, email);
Button entrar = new Button("Entrar");
entrar.onAction(c -> entrar(email.getText())); // lê o valor no envio (sem $binding)
add(LAY_AUTO, entrar);
}
}
Sem
$binding: você lêgetText()quando precisa (ex.: noonAction), não há vínculo automático campo↔variável (ver Campos de texto).
Veja também
Esta página foi útil?Obrigado pelo feedback!