第一个KMP应用

This commit is contained in:
SOR
2026-09-18 10:26:33 +08:00
parent 1c55a400e1
commit 4d9c28a86a
4 changed files with 224 additions and 5 deletions
+6 -4
View File
@@ -25,7 +25,7 @@
- build.gradle.kts
- .gitignore
- README.md
- gradlew (二进制脚本,一个bat,一个sh)
- gradlew (二进制脚本,一个 bat,一个 sh)
- gradle.proporties
- local.proporties (默认被 ignore)
- build.gradle.kts
@@ -50,6 +50,8 @@
KMP 的 UI 以 `@Composable` 函数为核心,各个平台的 `main()` 函数入口都会默认调用 `shared/commonMain/kotlin` 中的 `App()` 函数。基本的 UI 也都会在 commonMain 中编写。
在 Composable 函数中,通过各种 UI 函数的相互组合,便可以设计出无限可能的 GUI。
### @Composable 函数
我们先讲 `@Composable`,它是一个注解,用于函数或 lambda 变量:
@@ -61,15 +63,15 @@ fun MyButton(a: Int) {
}
val myCard = @Composable { a: Int ->
TODO() // lambda 不推荐
TODO() // lambda 不推荐大写首字母
} // 变量类型是 @Composable (Int) -> Unit
```
它有几个重要的特点:
- Composable 函数只能在 main 函数或 Composable 函数中被调用。
- Composable 函数只能在 main 函数(描述不严谨)或 Composable 函数中被调用。
- 当 Composable 函数的参数发生变化时,它会被立刻重组(重新触发),受影响的 UI 立刻重新绘制。
- 如果 Composable 函数的 lambda 参数的函数体中出现了 `Compose state` 对象,那么,当它的状态变化时,函数也会被重组。
- 如果 Composable 函数的 lambda 参数的函数体中使用了 `Compose state` 对象的 `value`,那么,当它的状态变化时,lambda 所在函数也会被重组。
### 保护变量值