[ADD] View model basique pour la page de login

RepositoryAndroid
Renaud BEURET 1 year ago
parent bbc03d891a
commit 12988cb4a9

@ -0,0 +1,17 @@
package fr.iut.sciencequest.ViewModels
import androidx.lifecycle.ViewModel
import fr.iut.sciencequest.ViewModels.UiStates.LoginUIState
import kotlinx.coroutines.flow.MutableStateFlow
class LoginViewModel: ViewModel() {
var uiState = MutableStateFlow(LoginUIState())
fun setPseudo(pseudo: String) {
uiState.value = LoginUIState(pseudo, uiState.value.mdp)
}
fun setMdp(mdp: String) {
uiState.value = LoginUIState(uiState.value.pseudo, mdp)
}
}

@ -0,0 +1,6 @@
package fr.iut.sciencequest.ViewModels.UiStates
data class LoginUIState (
val pseudo: String = "Pseudo",
val mdp: String = "Mot de passe"
)

@ -24,7 +24,7 @@ fun NavHost(context: Context) {
NavHost( NavHost(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
navController = navController, navController = navController,
startDestination = "pendu" startDestination = "login"
) { ) {
composable(route = "home") { composable(route = "home") {
HomeScreen( HomeScreen(

@ -13,6 +13,7 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextField import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -27,44 +28,41 @@ import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import fr.iut.sciencequest.R import fr.iut.sciencequest.R
import fr.iut.sciencequest.ViewModels.LoginViewModel
@Composable @Composable
fun LoginScreen(goToAccount: () -> Unit, goToHome: () -> Unit) { fun LoginScreen(viewModel: LoginViewModel = viewModel(),
goToAccount: () -> Unit,
goToHome: () -> Unit) {
Scaffold( Scaffold(
topBar = { topBar = {
TopBar(goToAccount, goToHome, stringResource(id = R.string.connection)) TopBar(goToAccount, goToHome, stringResource(id = R.string.connection))
}, },
) { innerPadding -> ) { innerPadding ->
LoginContainer(Modifier.padding(innerPadding)) LoginContainer(viewModel, Modifier.padding(innerPadding))
} }
} }
@Composable @Composable
fun LoginContainer(modifier: Modifier) { fun LoginContainer(viewModel: LoginViewModel,
modifier: Modifier) {
val state = viewModel.uiState.collectAsState()
Column( Column(
modifier = modifier.fillMaxHeight(), modifier = modifier.fillMaxHeight(),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
val defaultPseudo = stringResource(id = R.string.Pseudo)
var pseudo by remember {
mutableStateOf(defaultPseudo)
}
val defaultMdp = stringResource(id = R.string.mdp)
var mdp by remember {
mutableStateOf(defaultMdp)
}
//Text(text = stringResource(id = R.string.connection)) //Text(text = stringResource(id = R.string.connection))
TextField(value = pseudo , TextField(value = state.value.pseudo,
onValueChange = { pseudo = it }, onValueChange = { viewModel.setPseudo(it) },
modifier = Modifier modifier = Modifier
.padding(20.dp) .padding(20.dp)
.fillMaxWidth() .fillMaxWidth(),
) )
TextField(value = mdp, TextField(value = state.value.mdp,
onValueChange = { mdp = it }, onValueChange = { viewModel.setMdp(it) },
modifier = Modifier modifier = Modifier
.padding(20.dp) .padding(20.dp)
.fillMaxWidth() .fillMaxWidth()
@ -82,7 +80,7 @@ fun LoginContainer(modifier: Modifier) {
textDecoration = TextDecoration.Underline, textDecoration = TextDecoration.Underline,
color = colorResource(id = R.color.purple_200) color = colorResource(id = R.color.purple_200)
), ),
onClick = registerPopup() onClick = { }/*TODO*/ //registerPopup()
) )
} }

Loading…
Cancel
Save