我正在尝试根据两个文本字段不为空将我的 loginEnabled 值更改为 true 或 false,但是我当前的实现总是返回 false,有人能看到我犯了什么错误吗?我的电子邮件和密码状态是使用两个文本字段中的 onValueChange 函数更新的
@Composable
fun LoginScreen() {
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var passwordVisibility by remember { mutableStateOf(false) }
var loginEnabled by remember { mutableStateOf(
email.isNotEmpty() && password.isNotEmpty()
)}
TextField(
value = email,
onValueChange = { email = it },
label = { Text("Email") }
)
TextField(
value = password,
onValueChange = { password= it },
label = { Text("Password") }
)
答案 0 :(得分:1)
@Composable
fun LoginScreen() {
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var passwordVisibility by remember { mutableStateOf(false) }
var loginEnabled = email.isNotEmpty() && password.isNotEmpty()
TextField(
value = email,
onValueChange = { email = it },
label = { Text("Email") }
)
TextField(
value = password,
onValueChange = { password= it },
label = { Text("Password") }
)
答案 1 :(得分:1)
查看 remember(calculation: @DisallowComposableCalls () -> T): T
的文档:
记住[计算]产生的值。 【计算】只会 在组合期间进行评估。重组将始终返回组合产生的值
你必须使用:
var loginEnabled by remember(email, password) { mutableStateOf(
email.isNotEmpty() && password.isNotEmpty()
)}
<块引用>
如果key1和key2相等,记住计算返回的值 到以前的组成,否则产生并记住一个新的 调用计算取值。