我一直在使用 Jetpack Compose Desktop。我注意到一些我真的不明白的事情:
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
@Composable
@Preview
fun App() {
var text by mutableStateOf("Hello, World!")
MaterialTheme {
TextField(text, onValueChange = { text = it })
Button(onClick = {
text = "Hello, Desktop!"
}) {
Text(text)
}
}
}
fun main() = application {
Window(onCloseRequest = ::exitApplication) {
App()
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我可以更改 中的文本TextField
?我认为在每次重组时,可变状态都会使用初始值重新实例化:所以Text
应该无法更改
import androidx.compose.desktop.ui.tooling.preview.Preview
import …
Run Code Online (Sandbox Code Playgroud) 我从开发者网站上关注了这份文档。我想显示用户输入中的文本OutlinedTextField
,并使其在配置更改后保持不变。
使用下面的代码,当用户从键盘输入文本时,OutlinedTextField
不会更新文本。
HelloContent(name = city.name, onNameChange = { city.name = it})//Doesn't work
Run Code Online (Sandbox Code Playgroud)
然而这行代码可以正常工作:
HelloContent(name = temp, onNameChange = { temp = it})//Work
Run Code Online (Sandbox Code Playgroud)
下面是我用来实现的代码:
@Composable
fun HelloScreen() {
var city by rememberSaveable(stateSaver = CitySaver) {
mutableStateOf(City("Hanoi","VietNam"))
}
var temp by rememberSaveable {
mutableStateOf("")
}
Column {
HelloContent(name = city.name, onNameChange = { city.name = it})//Doesn't work
HelloContent(name = temp, onNameChange = { temp = it})//Work
}
}
@Composable
fun HelloContent(name: String, onNameChange: (String) -> Unit) …
Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose compose-recomposition mutablestateof
我有一个需要,比如第一次在 UI 加载时mutableStateOf Boolean值必须为null,而不是默认值 true/false 类似于 Kotlin 中的常规布尔值
var isBooleanValue: Boolean = null
Run Code Online (Sandbox Code Playgroud)
我需要的是如下
var isClassAccessedAtleastOnce = remember { mutableStateOf(null) }
Run Code Online (Sandbox Code Playgroud)
请让我知道用例是否有任何可能性