跳到内容
CrossFly 是 100% 开源在 GitHub 关注我们
CrossFlyCrossFly
开始使用

本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。

从 Jetpack Compose 迁移

在 Compose(声明式 Kotlin)中,当可观察状态变化时 UI 会重组。在 CrossFly 中你 装配一次并变更。请先阅读 理念。

转换表

Jetpack Compose CrossFly
@Composable fun 在 onShow() 中装配一次的方法
remember { mutableStateOf(...) } + 重组 字段 + repaint()(无重组)
Column / Row / Box VerticalLayout / HorizontalLayout / RelativeLayout
Modifier.weight(1f) add(LAY_FILL, c)(-1f)
Modifier.padding(...) 样式中的 ingap
LazyColumn VirtualListView
Text Label
Button Button
Scaffold / TopAppBar Window(+ TabBar)
NavController / NavHost Window 栈(show() / hide())
ViewModel + StateFlow 手动 ViewModel + 回调(无流收集)
LaunchedEffect / 协程 Thread + Component.onUI(...)
Color(0xFF...) int 0xAARRGGBB(UIConstants / ColorUtils)

之前/之后——计数器

// Compose: muda o state → recompõe sozinho
@Composable fun Contador() {
   var n by remember { mutableStateOf(0) }
   Column {
      Text("$n")
      Button(onClick = { n++ }) { Text("+") }
   }
}
// CrossFly:保存引用并手动更新
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)); });   // 无重组
      add(LAY_AUTO, mais);
   }
}

最令人意外的地方

StateFlow/collectAsState 没有对应项:CrossFly 不观察你的状态。你会 收集流的地方,改为把值保存在字段中并调用 repaint()(或在你的 ViewModel 中手动实现一个 observe(Runnable)——参见 应用架构)。

另请参阅

这个页面有帮助吗?