auth to server-V21
This commit is contained in:
parent
90b8b6da13
commit
b6ac133544
1 changed files with 26 additions and 9 deletions
|
|
@ -21,6 +21,7 @@ import androidx.compose.material.icons.rounded.Visibility
|
||||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ButtonDefaults
|
import androidx.compose.material3.ButtonDefaults
|
||||||
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
|
|
@ -46,6 +47,8 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
import androidx.compose.ui.text.input.VisualTransformation
|
import androidx.compose.ui.text.input.VisualTransformation
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import coil.decode.SvgDecoder
|
import coil.decode.SvgDecoder
|
||||||
|
|
@ -59,14 +62,16 @@ import kotlin.text.ifEmpty
|
||||||
@Composable
|
@Composable
|
||||||
fun LoginScreen(
|
fun LoginScreen(
|
||||||
paddingValues: PaddingValues,
|
paddingValues: PaddingValues,
|
||||||
|
viewModel: AuthViewModel = hiltViewModel(),
|
||||||
onLoginSuccess: () -> Unit
|
onLoginSuccess: () -> Unit
|
||||||
){
|
){
|
||||||
|
|
||||||
var email by remember { mutableStateOf("") }
|
val uiState by viewModel.loginState.collectAsStateWithLifecycle()
|
||||||
|
var username by remember { mutableStateOf("") }
|
||||||
var password by remember { mutableStateOf("") }
|
var password by remember { mutableStateOf("") }
|
||||||
var passwordVisible by remember { mutableStateOf(false) }
|
var passwordVisible by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
var emailError by remember { mutableStateOf("") }
|
var usernameError by remember { mutableStateOf("") }
|
||||||
var passwordError by remember { mutableStateOf("") }
|
var passwordError by remember { mutableStateOf("") }
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -151,12 +156,12 @@ fun LoginScreen(
|
||||||
|
|
||||||
|
|
||||||
TextField(
|
TextField(
|
||||||
value = email,
|
value = username,
|
||||||
onValueChange = { email = it},
|
onValueChange = { username = it},
|
||||||
label = {
|
label = {
|
||||||
Text(
|
Text(
|
||||||
emailError.ifEmpty { "Email" },
|
usernameError.ifEmpty { "username" },
|
||||||
color = if (emailError.isNotEmpty()) Red else Color.Unspecified
|
color = if (usernameError.isNotEmpty()) Red else Color.Unspecified
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -223,13 +228,25 @@ fun LoginScreen(
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
Spacer(modifier = Modifier.height(20.dp))
|
||||||
|
|
||||||
|
|
||||||
|
when (uiState) {
|
||||||
|
is LoginUiState.Loading -> CircularProgressIndicator()
|
||||||
|
is LoginUiState.Success -> {
|
||||||
|
val user = (uiState as LoginUiState.Success).user
|
||||||
|
Text("歡迎,${user.display_name}")
|
||||||
|
}
|
||||||
|
is LoginUiState.Error -> {
|
||||||
|
Text(text = (uiState as LoginUiState.Error).message, color = Color.Red)
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
|
|
||||||
Button(
|
Button(
|
||||||
shape = RoundedCornerShape(8.dp),
|
shape = RoundedCornerShape(8.dp),
|
||||||
onClick = {
|
onClick = {
|
||||||
emailError = if(email.isBlank()) "Email is required" else ""
|
usernameError = if(username.isBlank()) "Email is required" else ""
|
||||||
passwordError = if(password.isBlank()) "password is required" else ""
|
passwordError = if(password.isBlank()) "password is required" else ""
|
||||||
if (emailError.isEmpty() && passwordError.isEmpty()){
|
if (usernameError.isEmpty() && passwordError.isEmpty()){
|
||||||
//login auth logic
|
viewModel.login(username, password)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
colors = ButtonDefaults.buttonColors(
|
colors = ButtonDefaults.buttonColors(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue