我从开发人员站点跟踪了this document个.
我希望显示来自用户输入的OutlinedTextField
中的文本,并使其在配置更改后仍然有效.
使用下面的代码,当用户从键盘输入文本时,OutlinedTextField
不会更新文本.
HelloContent(name = city.name, onNameChange = { city.name = it})//Doesn't work
但是,下面这行代码可以正常工作:
HelloContent(name = temp, onNameChange = { temp = it})//Work
下面是我用来实现的代码:
@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) {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = "Hello, $name",
modifier = Modifier.padding(bottom = 8.dp),
style = MaterialTheme.typography.h5
)
OutlinedTextField(
value = name,
onValueChange = onNameChange,
label = { Text("Name") }
)
}
}
data class City(var name: String, val country: String)
val CitySaver = run {
val nameKey = "Name"
val countryKey = "Country"
mapSaver(save = {mapOf(nameKey to it.name,countryKey to it.country)},
restore = {City(it[nameKey] as String,it[countryKey] as String)})
}
你能帮我把第一个代码块修复好吗?
HelloContent(name = city.name, onNameChange = { city.name = it})//Doesn't work