Хорошо, у меня есть составная функция, простая: имя пользователя и пароль — это поля ввода, а под ними — кнопка входа. Когда я нажимаю на ввод имени пользователя, клавиатура открывается и выравнивается по нижней части, поэтому пароль и вход в систему перекрываются. Когда я нажимаю пароль, клавиатура перекрывает кнопку входа в систему, мне нужно, чтобы эти 3 элемента были видны в всегда, когда клавиатура открыта
@Composable
fun SignInScreen(
signInViewModel: SignInViewModel = hiltViewModel(),
onSignInSuccess: (String) -> Unit // Callback with token on success
) {
val signInState by signInViewModel.signInState.collectAsState()
var username by remember { mutableStateOf("degustatori") }
var password by remember { mutableStateOf("paroli123") }
var errorMessage by remember { mutableStateOf(null) }
// Main screen layout
Box(
modifier = Modifier
.fillMaxSize()
.padding(1.dp),
contentAlignment = Alignment.TopCenter
) {
Column(
modifier = Modifier
.fillMaxWidth(0.5f) // Make the form take up 90% of the width
.padding(2.dp), // Padding inside the form
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(id = R.drawable.georgian_wine), // Replace with your actual image resource name
contentDescription = "Logo",
modifier = Modifier
.size(200.dp) // Adjust the size as needed
.padding(bottom = 24.dp) // Space between the image and the text fields
)
Text(text = "Sign In", style = MaterialTheme.typography.headlineMedium)
Spacer(modifier = Modifier.height(8.dp))
OutlinedTextField(
value = username,
onValueChange = { username = it },
label = { Text("Username") },
shape = RoundedCornerShape(16.dp), // Rounded corners for the text field
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(16.dp))
OutlinedTextField(
value = password,
onValueChange = { password = it },
label = { Text("Password") },
visualTransformation = PasswordVisualTransformation(),
shape = RoundedCornerShape(16.dp), // Rounded corners for the text field
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(24.dp))
Button(
onClick = {
errorMessage = null // Clear previous error
signInViewModel.signIn(username, password)
},
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(16.dp), // Rounded corners for the button
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary) // Change button color
) {
Text("Sign In", color = Color.White) // Change text color to white
}
Spacer(modifier = Modifier.height(16.dp))
// Handle different sign-in states
when (val state = signInState) {
is SignInState.Loading -> {
CircularProgressIndicator()
}
is SignInState.Success -> {
LaunchedEffect(Unit) {
onSignInSuccess(state.token) // Trigger navigation on success only
}
}
is SignInState.Error -> {
errorMessage = state.message // Set error message
}
SignInState.Idle -> {
// Initial idle state - no action needed
}
}
// Show error message if present
errorMessage?.let { error ->
Spacer(modifier = Modifier.height(16.dp))
Text(
text = error,
color = MaterialTheme.colorScheme.error,
style = MaterialTheme.typography.bodyMedium
)
}
}
}
}
это мой код
Я пробовал gpt, но это совсем не помогло
Хорошо, у меня есть составная функция, простая: имя пользователя и пароль — это поля ввода, а под ними — кнопка входа. Когда я нажимаю на ввод имени пользователя, клавиатура открывается и выравнивается по нижней части, поэтому пароль и вход в систему перекрываются. Когда я нажимаю пароль, клавиатура перекрывает кнопку входа в систему, мне нужно, чтобы эти 3 элемента были видны в всегда, когда клавиатура открыта [code]@Composable fun SignInScreen( signInViewModel: SignInViewModel = hiltViewModel(), onSignInSuccess: (String) -> Unit // Callback with token on success ) { val signInState by signInViewModel.signInState.collectAsState()
var username by remember { mutableStateOf("degustatori") } var password by remember { mutableStateOf("paroli123") } var errorMessage by remember { mutableStateOf(null) }
// Main screen layout Box( modifier = Modifier .fillMaxSize() .padding(1.dp), contentAlignment = Alignment.TopCenter ) { Column( modifier = Modifier .fillMaxWidth(0.5f) // Make the form take up 90% of the width .padding(2.dp), // Padding inside the form horizontalAlignment = Alignment.CenterHorizontally ) { Image( painter = painterResource(id = R.drawable.georgian_wine), // Replace with your actual image resource name contentDescription = "Logo", modifier = Modifier .size(200.dp) // Adjust the size as needed .padding(bottom = 24.dp) // Space between the image and the text fields ) Text(text = "Sign In", style = MaterialTheme.typography.headlineMedium)
Spacer(modifier = Modifier.height(8.dp))
OutlinedTextField( value = username, onValueChange = { username = it }, label = { Text("Username") }, shape = RoundedCornerShape(16.dp), // Rounded corners for the text field modifier = Modifier.fillMaxWidth() )
Spacer(modifier = Modifier.height(16.dp))
OutlinedTextField( value = password, onValueChange = { password = it }, label = { Text("Password") }, visualTransformation = PasswordVisualTransformation(), shape = RoundedCornerShape(16.dp), // Rounded corners for the text field modifier = Modifier.fillMaxWidth() )
Spacer(modifier = Modifier.height(24.dp))
Button( onClick = { errorMessage = null // Clear previous error signInViewModel.signIn(username, password) }, modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(16.dp), // Rounded corners for the button colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary) // Change button color ) { Text("Sign In", color = Color.White) // Change text color to white }
Spacer(modifier = Modifier.height(16.dp))
// Handle different sign-in states when (val state = signInState) { is SignInState.Loading -> { CircularProgressIndicator() } is SignInState.Success -> { LaunchedEffect(Unit) { onSignInSuccess(state.token) // Trigger navigation on success only } } is SignInState.Error -> { errorMessage = state.message // Set error message } SignInState.Idle -> { // Initial idle state - no action needed } }
// Show error message if present errorMessage?.let { error -> Spacer(modifier = Modifier.height(16.dp)) Text( text = error, color = MaterialTheme.colorScheme.error, style = MaterialTheme.typography.bodyMedium ) } } } } [/code] это мой код Я пробовал gpt, но это совсем не помогло