Mdp haché + création components

pull/12/head
Leni BEAULATON 2 months ago
parent 5a1949aca1
commit f6ceb44e29

@ -11,6 +11,7 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.navigation.NavController
import com.example.what_the_fantasy.ui.screens.AppNavigator import com.example.what_the_fantasy.ui.screens.AppNavigator
import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme
import com.example.what_the_fantasy.ui.screens.LoginPage import com.example.what_the_fantasy.ui.screens.LoginPage
@ -23,14 +24,7 @@ class MainActivity : ComponentActivity() {
enableEdgeToEdge() enableEdgeToEdge()
setContent { setContent {
What_The_FantasyTheme { What_The_FantasyTheme {
Column {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Title(
title = "What The Fantasy",
modifier = Modifier.padding(innerPadding)
)
}
}
AppNavigator() // Accès à la page login et SingUp (pour le moment) AppNavigator() // Accès à la page login et SingUp (pour le moment)
//ProfilPage() //Accès à la page profil //ProfilPage() //Accès à la page profil
//QuizPage() //QuizPage()
@ -39,11 +33,4 @@ class MainActivity : ComponentActivity() {
} }
} }
@Composable
fun Title(title: String, modifier: Modifier = Modifier) {
Text(
text = "Welcome to $title!",
modifier = modifier
)
}

@ -0,0 +1,22 @@
package com.example.what_the_fantasy.ui.components
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@Composable
fun ErrorMessageProfileComponent(titleResId : Int) {
val textError = stringResource(id = titleResId)
Text(
text = textError,
color = Color.Red,
fontSize = 12.sp,
modifier = Modifier.padding(top = 4.dp)
)
}

@ -0,0 +1,15 @@
package com.example.what_the_fantasy.ui.components
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun SpaceHeightComponent(height : Int){
Spacer(
modifier = Modifier
.height(height.dp)) // Ajoute un espacement
}

@ -0,0 +1,21 @@
package com.example.what_the_fantasy.ui.components
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
@Composable
fun TitlePageComponent(titleResId : Int, size : Int, color : Color) {
val title = stringResource(id = titleResId)
Text(
text = title,
fontSize = size.sp,
fontWeight = FontWeight.Bold,
color = color
)
}

@ -52,6 +52,8 @@ import androidx.navigation.compose.composable
import com.example.what_the_fantasy.R import com.example.what_the_fantasy.R
import com.example.what_the_fantasy.data.local.UserStub import com.example.what_the_fantasy.data.local.UserStub
import com.example.what_the_fantasy.data.model.User import com.example.what_the_fantasy.data.model.User
import com.example.what_the_fantasy.ui.components.SpaceHeightComponent
import com.example.what_the_fantasy.ui.components.TitlePageComponent
import org.mindrot.jbcrypt.BCrypt import org.mindrot.jbcrypt.BCrypt
import java.security.MessageDigest import java.security.MessageDigest
@ -81,23 +83,18 @@ fun LoginPage(navController : NavController) {
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
TitlePage(R.string.titleLogin, 20,Color.White) TitlePageComponent(R.string.titleLogin, 20,Color.White)
val identifiant =IdentifiantTextField(R.string.IdentifiantLogin) val identifiant =IdentifiantTextField(R.string.IdentifiantLogin)
val passwd = PassWdTextField(R.string.PasswdLogin) val passwd = PassWdTextField(R.string.PasswdLogin)
Space(16) SpaceHeightComponent(16)
ConnexionButtonLogin(users,identifiant, passwd, R.string.ButtonLogin,18, Color.White, Color.Black,navController) ConnexionButtonLogin(users,identifiant, passwd, R.string.ButtonLogin,18, Color.White, Color.Black,navController)
Space(16) SpaceHeightComponent(16)
CreateAccountButton(R.string.ButtonCreateLogin,12, Color.White, navController) CreateAccountButton(R.string.ButtonCreateLogin,12, Color.White, navController)
} }
} }
} }
@Composable
fun Space(height : Int){
Spacer(
modifier = Modifier
.height(height.dp)) // Ajoute un espacement
}
@Composable @Composable
@ -144,16 +141,16 @@ fun PassWdTextField(textpasswdResId : Int) : String{
return passwd; return passwd;
} }
@Composable //@Composable
fun TitlePage(titleResId : Int, size : Int, color : Color){ //fun TitlePage(titleResId : Int, size : Int, color : Color){
val title = stringResource(id = titleResId) // val title = stringResource(id = titleResId)
Text( // Text(
text = title, // text = title,
fontSize = size.sp, // fontSize = size.sp,
fontWeight = FontWeight.Bold, // fontWeight = FontWeight.Bold,
color = color // color = color
) // )
} //}
@Composable @Composable
fun ConnexionButtonLogin(userStub : List<User>, id : String, passwd : String, titleResId : Int, size : Int, colorButton : Color, colorText : Color, navController: NavController){ fun ConnexionButtonLogin(userStub : List<User>, id : String, passwd : String, titleResId : Int, size : Int, colorButton : Color, colorText : Color, navController: NavController){
@ -181,10 +178,10 @@ fun validLogin(identifiant : String, passwd : String, users : List<User>, navCon
} }
fun hashPassword(password: String): String { fun hashPassword(password: String): String {
// Créer un objet MessageDigest pour SHA-256 // SHA-256
val digest = MessageDigest.getInstance("SHA-256") val digest = MessageDigest.getInstance("SHA-256")
// Convertir le mot de passe en bytes et appliquer le hash // Convertir mdp en bytes et appliquer le hash
val hashedBytes = digest.digest(password.toByteArray()) val hashedBytes = digest.digest(password.toByteArray())
// Convertir le tableau de bytes en une chaîne hexadécimale // Convertir le tableau de bytes en une chaîne hexadécimale

@ -61,6 +61,9 @@ import coil.compose.AsyncImage
import com.example.what_the_fantasy.R import com.example.what_the_fantasy.R
import com.example.what_the_fantasy.data.local.QuestionStub import com.example.what_the_fantasy.data.local.QuestionStub
import com.example.what_the_fantasy.data.local.UserStub import com.example.what_the_fantasy.data.local.UserStub
import com.example.what_the_fantasy.ui.components.ErrorMessageProfileComponent
import com.example.what_the_fantasy.ui.components.SpaceHeightComponent
import com.example.what_the_fantasy.ui.components.TitlePageComponent
import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme
@Composable @Composable
@ -90,28 +93,27 @@ fun ProfilPage(navController: NavController) {
) { ) {
// Titre // Titre
TitleProfil(R.string.titleProfile, 20, Color.White) TitlePageComponent(R.string.titleProfile, 20, Color.White)
SpaceProfil(16) SpaceHeightComponent(16)
// Image de profil // Image de profil
//val id = R.drawable.ic_launcher_foreground
ImageProfil(user[index].imgUrl, 120, 2, Color.White) ImageProfil(user[index].imgUrl, 120, 2, Color.White)
SpaceProfil(16) SpaceHeightComponent(16)
EditUsername(user[index].username)// Édition du Username EditUsername(user[index].username)// Édition du Username
SpaceProfil(16) SpaceHeightComponent(16)
EditEmail(user[index].email)// Édition du Email EditEmail(user[index].email)// Édition du Email
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
EditPasswd() EditPasswd()
SpaceProfil(16) SpaceHeightComponent(16)
// Bouton // Bouton
ButtonProfile(R.string.ButtonAddQuoteprofile,18, Color.Black, Color.White) ButtonProfile(R.string.ButtonAddQuoteprofile,18, Color.Black, Color.White)
SpaceProfil(16) SpaceHeightComponent(16)
ButtonProfile(R.string.ButtonLanguageprofile,18, Color.Black, Color.White) ButtonProfile(R.string.ButtonLanguageprofile,18, Color.Black, Color.White)
SpaceProfil(16) SpaceHeightComponent(16)
ButtonProfile(R.string.ButtonUnlogprofile, 18, Color.Black, Color.White) ButtonProfile(R.string.ButtonUnlogprofile, 18, Color.Black, Color.White)
} }
@ -119,24 +121,8 @@ fun ProfilPage(navController: NavController) {
} }
@Composable
fun SpaceProfil(height : Int){
Spacer(
modifier = Modifier
.height(height.dp)) // Ajoute un espacement
}
@Composable
fun TitleProfil(titleResId : Int, size : Int, color : Color){
val title = stringResource(id = titleResId)
Text(
text = title,
fontSize = size.sp,
fontWeight = FontWeight.Bold,
color = color
)
}
@Composable @Composable
fun ImageProfil(imgProfil : String, size :Int, sizeBorber : Int, colorBorder : Color){ fun ImageProfil(imgProfil : String, size :Int, sizeBorber : Int, colorBorder : Color){
@ -148,226 +134,309 @@ fun ImageProfil(imgProfil : String, size :Int, sizeBorber : Int, colorBorder : C
.size(size.dp) .size(size.dp)
.clip(CircleShape) .clip(CircleShape)
) )
} }
@Composable @Composable
fun EditEmail(userEmail : String){ fun EditEmail(userEmail: String) {
var email by remember { mutableStateOf(userEmail) } var email by remember { mutableStateOf(userEmail) }
var isEditingEmail by remember { mutableStateOf(false) } // État d'édition var isEditingEmail by remember { mutableStateOf(false) }
var emailError by remember { mutableStateOf(false) } var emailError by remember { mutableStateOf(false) }
if (isEditingEmail) { if (isEditingEmail) {
OutlinedTextField( EmailEditingField(
value = email, email = email,
onValueChange = { onEmailChange = { newEmail ->
email = it email = newEmail
emailError = !Patterns.EMAIL_ADDRESS.matcher(it).matches() emailError = !Patterns.EMAIL_ADDRESS.matcher(newEmail).matches()
}, },
modifier = Modifier.fillMaxWidth(), onDone = {
textStyle = TextStyle(color = Color.White, fontSize = 18.sp), if (!emailError) isEditingEmail = false
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Email, // ✅ Clavier spécialisé pour email
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = { if (!emailError) isEditingEmail = false } // ✅ Fermer si l'email est valide
),
trailingIcon = {
IconButton(onClick = { if (!emailError) isEditingEmail = false }) {
Icon(imageVector = Icons.Default.Check, contentDescription = "Valider")
}
}, },
isError = emailError // ✅ Afficher l'erreur si l'email est invalide emailError = emailError
) )
if (emailError) {
val text = stringResource(id = R.string.ErrorEmailprofile)
Text(
text = text,
color = Color.Red,
fontSize = 12.sp,
modifier = Modifier.padding(top = 4.dp)
)
}
} else { } else {
Row( DisplayEmail(email = email, onEdit = { isEditingEmail = true })
verticalAlignment = Alignment.CenterVertically, }
modifier = Modifier.clickable { isEditingEmail = true } }
) {
Text( @Composable
text = email, fun EmailEditingField(
fontSize = 18.sp, email: String,
fontWeight = FontWeight.Bold, onEmailChange: (String) -> Unit,
color = Color.White onDone: () -> Unit,
) emailError: Boolean
Icon( ) {
imageVector = Icons.Default.Edit, OutlinedTextField(
contentDescription = "Modifier", value = email,
tint = Color.White, onValueChange = onEmailChange,
modifier = Modifier.size(16.dp).padding(start = 8.dp) modifier = Modifier.fillMaxWidth(),
) textStyle = TextStyle(color = Color.White, fontSize = 18.sp),
} singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Email,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = { onDone() }
),
trailingIcon = {
IconButton(onClick = { if (!emailError) onDone() }) {
Icon(imageVector = Icons.Default.Check, contentDescription = "Valider")
}
},
isError = emailError
)
if (emailError) {
ErrorMessageProfileComponent(R.string.ErrorEmailprofile)
}
}
@Composable
fun DisplayEmail(email: String, onEdit: () -> Unit) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable { onEdit() }
) {
Text(
text = email,
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.White
)
Icon(
imageVector = Icons.Default.Edit,
contentDescription = "Modifier",
tint = Color.White,
modifier = Modifier.size(16.dp).padding(start = 8.dp)
)
} }
} }
@Composable @Composable
fun EditUsername(userName : String){ fun EditUsername(userName: String) {
var username by remember { mutableStateOf(userName) } var username by remember { mutableStateOf(userName) }
var isEditingUsername by remember { mutableStateOf(false) } // État d'édition var isEditingUsername by remember { mutableStateOf(false) }
if (isEditingUsername) { if (isEditingUsername) {
OutlinedTextField( UsernameEditingField(
value = username, username = username,
onValueChange = { username = it }, onUsernameChange = { username = it },
modifier = Modifier.fillMaxWidth(), onDone = { isEditingUsername = false }
textStyle = TextStyle(color = Color.White, fontSize = 18.sp),
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = { isEditingUsername = false } // Quand on appuie sur "Done"
),
trailingIcon = {
IconButton(onClick = { isEditingUsername = false }) {
Icon(imageVector = Icons.Default.Check, contentDescription = "Valider")
}
}
) )
} else { } else {
Row( DisplayUsername(username = username, onEdit = { isEditingUsername = true })
verticalAlignment = Alignment.CenterVertically, }
modifier = Modifier.clickable { isEditingUsername = true } }
) {
Text( @Composable
text = username, fun UsernameEditingField(
fontSize = 18.sp, username: String,
fontWeight = FontWeight.Bold, onUsernameChange: (String) -> Unit,
color = Color.White onDone: () -> Unit
) ) {
Icon( OutlinedTextField(
imageVector = Icons.Default.Edit, value = username,
contentDescription = "Modifier", onValueChange = onUsernameChange,
tint = Color.White, modifier = Modifier.fillMaxWidth(),
modifier = Modifier.size(16.dp).padding(start = 8.dp) textStyle = TextStyle(color = Color.White, fontSize = 18.sp),
) singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = { onDone() } // Quand on appuie sur "Done", on met fin à l'édition
),
trailingIcon = {
IconButton(onClick = { onDone() }) {
Icon(imageVector = Icons.Default.Check, contentDescription = "Valider")
}
} }
)
}
@Composable
fun DisplayUsername(username: String, onEdit: () -> Unit) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable { onEdit() }
) {
Text(
text = username,
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.White
)
Icon(
imageVector = Icons.Default.Edit,
contentDescription = "Modifier",
tint = Color.White,
modifier = Modifier.size(16.dp).padding(start = 8.dp)
)
} }
} }
@Composable @Composable
fun EditPasswd(){ fun EditPasswd() {
var password by remember { mutableStateOf("*******") } var password by remember { mutableStateOf("*******") }
var isEditingPassword by remember { mutableStateOf(false) } var isEditingPassword by remember { mutableStateOf(false) }
var newPassword by remember { mutableStateOf("") } var newPassword by remember { mutableStateOf("") }
var confirmPassword by remember { mutableStateOf("") } var confirmPassword by remember { mutableStateOf("") }
var passwordVisible by remember { mutableStateOf(false) } var passwordVisible by remember { mutableStateOf(false) }
var passwordError by remember { mutableStateOf(false) } var passwordError by remember { mutableStateOf(false) }
if (isEditingPassword) { if (isEditingPassword) {
Column { PasswordEditingFields(
val text = stringResource(id = R.string.NewPasswdprofile) newPassword = newPassword,
OutlinedTextField( confirmPassword = confirmPassword,
value = newPassword, onNewPasswordChange = { newPassword = it },
onValueChange = { newPassword = it }, onConfirmPasswordChange = {
label = { Text(text) }, confirmPassword = it
modifier = Modifier.fillMaxWidth(), passwordError = newPassword != it
textStyle = TextStyle(color = Color.White, fontSize = 18.sp), },
singleLine = true, passwordVisible = passwordVisible,
keyboardOptions = KeyboardOptions.Default.copy( onPasswordVisibilityChange = { passwordVisible = it },
keyboardType = KeyboardType.Password, passwordError = passwordError,
imeAction = ImeAction.Next onDone = {
), if (!passwordError && newPassword.isNotEmpty()) {
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(), password = newPassword
trailingIcon = { isEditingPassword = false
IconButton(onClick = { passwordVisible = !passwordVisible }) {
}
} }
)
Spacer(modifier = Modifier.height(8.dp))
val textConfirm = stringResource(id = R.string.ConfirmNewPasswdprofile)
OutlinedTextField(
value = confirmPassword,
onValueChange = {
confirmPassword = it
passwordError = newPassword != it
},
label = { Text(textConfirm) },
modifier = Modifier.fillMaxWidth(),
textStyle = TextStyle(color = Color.White, fontSize = 18.sp),
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Password,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = { if (!passwordError && newPassword.isNotEmpty()) {
password = newPassword
isEditingPassword = false
}}
),
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = {
IconButton(onClick = { passwordVisible = !passwordVisible }) {
}
},
isError = passwordError
)
if (passwordError) {
val text = stringResource(id = R.string.Errorpasswdprofile)
Text(
text = text,
color = Color.Red,
fontSize = 12.sp,
modifier = Modifier.padding(top = 4.dp)
)
} }
)
} else {
DisplayPassword(onEdit = { isEditingPassword = true })
}
}
Spacer(modifier = Modifier.height(8.dp)) @Composable
fun PasswordEditingFields(
newPassword: String,
confirmPassword: String,
onNewPasswordChange: (String) -> Unit,
onConfirmPasswordChange: (String) -> Unit,
passwordVisible: Boolean,
onPasswordVisibilityChange: (Boolean) -> Unit,
passwordError: Boolean,
onDone: () -> Unit
) {
Column {
val text = stringResource(id = R.string.NewPasswdprofile)
PasswordTextField(
value = newPassword,
onValueChange = onNewPasswordChange,
label = text,
passwordVisible = passwordVisible,
onPasswordVisibilityChange = onPasswordVisibilityChange
)
Button( Spacer(modifier = Modifier.height(8.dp))
onClick = {
if (!passwordError && newPassword.isNotEmpty()) { val textConfirm = stringResource(id = R.string.ConfirmNewPasswdprofile)
password = newPassword PasswordTextField(
isEditingPassword = false value = confirmPassword,
} onValueChange = onConfirmPasswordChange,
}, label = textConfirm,
colors = ButtonDefaults.buttonColors(containerColor = Color.White), passwordVisible = passwordVisible,
modifier = Modifier.fillMaxWidth() onPasswordVisibilityChange = onPasswordVisibilityChange,
) { isError = passwordError,
val text = stringResource(id = R.string.ButtonSaveprofile) onDone = onDone
Text(text, fontSize = 18.sp, color = Color.Black) )
}
} if (passwordError) {
} else { ErrorMessageProfileComponent(R.string.Errorpasswdprofile)
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable { isEditingPassword = true }
) {
Text(
text = password,
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.White
)
Icon(
imageVector = Icons.Default.Edit,
contentDescription = "Modifier",
tint = Color.White,
modifier = Modifier.size(16.dp).padding(start = 8.dp)
)
} }
Spacer(modifier = Modifier.height(8.dp))
SaveButton(onClick = onDone)
} }
} }
@Composable
fun PasswordTextField(
value: String,
onValueChange: (String) -> Unit,
label: String,
passwordVisible: Boolean,
onPasswordVisibilityChange: (Boolean) -> Unit,
isError: Boolean = false,
onDone: (() -> Unit)? = null
) {
OutlinedTextField(
value = value,
onValueChange = onValueChange,
label = { Text(label) },
modifier = Modifier.fillMaxWidth(),
textStyle = TextStyle(color = Color.White, fontSize = 18.sp),
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Password,
imeAction = if (onDone != null) ImeAction.Done else ImeAction.Next
),
keyboardActions = onDone?.let {
KeyboardActions(onDone = { it() })
} ?: KeyboardActions.Default,
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = {
IconButton(onClick = { onPasswordVisibilityChange(!passwordVisible) }) {
// Ajout d'une icône pour montrer/masquer le mot de passe
}
},
isError = isError
)
}
@Composable
fun SaveButton(onClick: () -> Unit) {
Button(
onClick = onClick,
colors = ButtonDefaults.buttonColors(containerColor = Color.White),
modifier = Modifier.fillMaxWidth()
) {
val text = stringResource(id = R.string.ButtonSaveprofile)
Text(text,
fontSize = 18.sp,
color = Color.Black)
}
}
@Composable
fun DisplayPassword(onEdit: () -> Unit) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable { onEdit() }
) {
Text(
text = "*****",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.White
)
Icon(
imageVector = Icons.Default.Edit,
contentDescription = "Modifier",
tint = Color.White,
modifier = Modifier.size(16.dp).padding(start = 8.dp)
)
}
}
@Composable @Composable
fun ButtonProfile(textResId : Int, size :Int, colorTexte : Color, colorButton : Color){ fun ButtonProfile(textResId : Int, size :Int, colorTexte : Color, colorButton : Color){

@ -40,6 +40,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.navigation.NavController import androidx.navigation.NavController
import com.example.what_the_fantasy.R import com.example.what_the_fantasy.R
import com.example.what_the_fantasy.ui.components.SpaceHeightComponent
import com.example.what_the_fantasy.ui.components.TitlePageComponent
import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme
import org.mindrot.jbcrypt.BCrypt import org.mindrot.jbcrypt.BCrypt
@ -67,26 +69,21 @@ fun SignUpPage(navController: NavController) {
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
TitlePage(R.string.titleSignUp, 20,Color.White) TitlePageComponent(R.string.titleSignUp, 20,Color.White)
IdentifiantTextFieldSign(R.string.IdentifiantLogin) IdentifiantTextFieldSign(R.string.IdentifiantLogin)
EmailTextFieldSign("Email*") EmailTextFieldSign("Email*")
PassWdTextFieldSign(R.string.PasswdLogin) PassWdTextFieldSign(R.string.PasswdLogin)
PassWdConfirmTextFieldSign(R.string.ConfirmPassWdSignUp) PassWdConfirmTextFieldSign(R.string.ConfirmPassWdSignUp)
SpaceSign(16) SpaceHeightComponent(16)
ConnexionButtonSign(R.string.ButtonSignUp,18, Color.White, Color.Black) ConnexionButtonSign(R.string.ButtonSignUp,18, Color.White, Color.Black)
SpaceSign(16) SpaceHeightComponent(16)
CreateAccountButtonSign(R.string.ButtonLogin,12, Color.White, navController = navController) CreateAccountButtonSign(R.string.ButtonLogin,12, Color.White, navController = navController)
} }
} }
} }
@Composable
fun SpaceSign(height : Int){
Spacer(
modifier = Modifier
.height(height.dp)) // Ajoute un espacement
}
@Composable @Composable
@ -120,7 +117,7 @@ fun EmailTextFieldSign(textIdentifiant : String){
.fillMaxWidth() .fillMaxWidth()
.padding(top = 8.dp), .padding(top = 8.dp),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
shape = RoundedCornerShape(16.dp) // 🔹 Bords arrondis shape = RoundedCornerShape(16.dp) // Bords arrondis
) )
} }
} }

Loading…
Cancel
Save