我有以下可组合的函数.这是一个简单的登录屏幕与用户名,密码和提交按钮.
当用户点击提交按钮时,如果用户名或密码字段为空,则会显示一个快捷栏.然而,它在第一次点击时起作用,但随后的点击不起作用.
如果需要显示快捷栏,我会认为按钮点击会强制合成内容重新组合,LaunchEffect键将为真.
@Composable
fun Login() {
var username by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
val scaffoldState = rememberScaffoldState()
var shouldShowSnackBar by remember { mutableStateOf(false) }
println("LoginScreen")
LaunchedEffect(key1 = shouldShowSnackBar, block = {
println("ShouldShowSnackBar")
scaffoldState.snackbarHostState.showSnackbar(
message = "Please enter a username and password",
duration = SnackbarDuration.Short
)
})
Scaffold(
scaffoldState = scaffoldState
) {
Column(modifier = Modifier.fillMaxWidth()) {
OutlinedTextField(
label = {
Text(text = "Username")
},
value = username,
onValueChange = { newUsername ->
username = newUsername
})
OutlinedTextField(
label = {
Text(text = "Password")
},
value = password,
onValueChange = { newPassword ->
password = newPassword
},
visualTransformation = PasswordVisualTransformation())
OutlinedButton(
modifier = Modifier.fillMaxWidth(),
onClick = {
shouldShowSnackBar = username.isEmpty() || password.isEmpty()
println("Button pressed: $shouldShowSnackBar")
}) {
Text(text = "Submit")
}
}
}
}