diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0e3ab1c..6c286ef 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -73,6 +73,7 @@ dependencies { implementation(libs.retrofit.adapters.arrow) implementation(libs.arrow.core) + implementation(libs.androidx.navigation.compose) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) diff --git a/app/src/main/java/com/iqball/app/MainActivity.kt b/app/src/main/java/com/iqball/app/MainActivity.kt index 9accff0..5e247fd 100644 --- a/app/src/main/java/com/iqball/app/MainActivity.kt +++ b/app/src/main/java/com/iqball/app/MainActivity.kt @@ -8,9 +8,14 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController import com.google.gson.Gson import com.iqball.app.api.EitherBodyConverter import com.iqball.app.api.EitherCallAdapterFactory @@ -63,22 +68,35 @@ class MainActivity : ComponentActivity() { @Composable fun App(service: IQBallService, sessionState: MutableState) { + val navController = rememberNavController() - val registerPage: @Composable () -> Unit = { - RegisterPage(service = service, onRegisterSuccess = { auth -> - sessionState.value = DataSession(auth) - }) - } - - val loginPage: @Composable () -> Unit = { - LoginPage(service = service, onLoginSuccess = { auth -> - sessionState.value = DataSession(auth) - }) + NavHost(navController = navController, startDestination = "login") { + composable("login") { + LoginPage( + service = service, + onLoginSuccess = { auth -> + sessionState.value = DataSession(auth) + navController.navigate("home") + }, + onNavigateToRegister = { + navController.navigate("register") + } + ) + } + composable("register") { + RegisterPage( + service = service, + onRegisterSuccess = { auth -> + sessionState.value = DataSession(auth) + navController.navigate("home") + }, + onNavigateToLogin = { + navController.navigate("login") + } + ) + } + composable("home") { + HomePage(service = service, session = sessionState.value) + } } - val homePage : @Composable () -> Unit = { HomePage(service, sessionState.value) } - - //registerPage() - val currentPage = remember(sessionState.value.auth) { if (sessionState.value.auth == null) loginPage else homePage } - currentPage() - } \ No newline at end of file diff --git a/app/src/main/java/com/iqball/app/page/LoginPage.kt b/app/src/main/java/com/iqball/app/page/LoginPage.kt index d2d50d6..f1cd62e 100644 --- a/app/src/main/java/com/iqball/app/page/LoginPage.kt +++ b/app/src/main/java/com/iqball/app/page/LoginPage.kt @@ -20,7 +20,11 @@ import kotlinx.coroutines.runBlocking @Composable -fun LoginPage(service: AuthService, onLoginSuccess: (Authentication) -> Unit) { +fun LoginPage( + service: AuthService, + onLoginSuccess: (Authentication) -> Unit, + onNavigateToRegister: () -> Unit +) { var email by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } var errors by remember { mutableStateOf("") } @@ -87,6 +91,10 @@ fun LoginPage(service: AuthService, onLoginSuccess: (Authentication) -> Unit) { }) { Text(text = "Se connecter") } + Spacer(modifier = Modifier.height(16.dp)) + Button(onClick = { onNavigateToRegister() }) { + Text(text = "Vous n'avez pas de compte ?") + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/iqball/app/page/RegisterPage.kt b/app/src/main/java/com/iqball/app/page/RegisterPage.kt index 2e02b03..ce91d21 100644 --- a/app/src/main/java/com/iqball/app/page/RegisterPage.kt +++ b/app/src/main/java/com/iqball/app/page/RegisterPage.kt @@ -28,7 +28,11 @@ import com.iqball.app.session.Authentication import kotlinx.coroutines.runBlocking @Composable -fun RegisterPage(service: AuthService, onRegisterSuccess: (Authentication) -> Unit) { +fun RegisterPage( + service: AuthService, + onRegisterSuccess: (Authentication) -> Unit, + onNavigateToLogin: () -> Unit +) { var username by remember { mutableStateOf("") } var email by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } @@ -105,6 +109,10 @@ fun RegisterPage(service: AuthService, onRegisterSuccess: (Authentication) -> Un }) { Text(text = "Créer votre compte") } + Spacer(modifier = Modifier.height(16.dp)) + Button(onClick = { onNavigateToLogin() }) { + Text(text = "Vous avez déjà un compte ?") + } } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f10c49e..395069b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,6 +15,7 @@ composeBom = "2023.08.00" retrofit = "2.9.0" retrofit2KotlinxSerializationConverter = "1.0.0" retrofitAdaptersArrow = "1.0.9" +navigationCompose = "2.7.7" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -38,6 +39,7 @@ kotlinx-serialization-json-jvm = { module = "org.jetbrains.kotlinx:kotlinx-seria retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } retrofit-adapters-arrow = { module = "com.github.skydoves:retrofit-adapters-arrow", version.ref = "retrofitAdaptersArrow" } retrofit2-kotlinx-serialization-converter = { module = "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", version.ref = "retrofit2KotlinxSerializationConverter" } +androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }