如何在 Jetpack Compose 的 MutableState 中使用条件

时间:2021-07-14 10:58:26

标签: android android-jetpack-compose

我正在尝试根据两个文本字段不为空将我的 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") }
        )

2 个答案:

答案 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相等,记住计算返回的值 到以前的组成,否则产生并记住一个新的 调用计算取值。