From 407dd4f22abf5fcf8270579494ebef671c7eec82 Mon Sep 17 00:00:00 2001 From: tomivt Date: Thu, 20 Feb 2025 15:25:04 +0100 Subject: [PATCH] Add Navigation into Quiz pages --- .../example/what_the_fantasy/MainActivity.kt | 12 ------- .../ui/navigations/AppNavigator.kt | 27 ++++++++++++++-- .../what_the_fantasy/ui/screens/LoginPage.kt | 7 ---- .../ui/screens/QuizEndPage.kt | 2 +- .../screens/{QuizAccueil.kt => QuizMenu.kt} | 32 +++---------------- .../what_the_fantasy/ui/screens/QuizPage.kt | 14 +++----- 6 files changed, 35 insertions(+), 59 deletions(-) rename What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/{QuizAccueil.kt => QuizMenu.kt} (80%) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt index 2d893b5..2c953cc 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt @@ -4,19 +4,8 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.navigation.NavController import com.example.what_the_fantasy.ui.navigations.AppNavigator 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.ProfilPage -import com.example.what_the_fantasy.ui.screens.QuizPage class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -26,7 +15,6 @@ class MainActivity : ComponentActivity() { What_The_FantasyTheme { AppNavigator() - //QuizPage() } } } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt index fc05703..4475a7f 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt @@ -8,6 +8,8 @@ import com.example.what_the_fantasy.ui.screens.AccueilPage import com.example.what_the_fantasy.ui.screens.FavoritePage import com.example.what_the_fantasy.ui.screens.LoginPage import com.example.what_the_fantasy.ui.screens.ProfilPage +import com.example.what_the_fantasy.ui.screens.QuizEndPage +import com.example.what_the_fantasy.ui.screens.QuizMenu import com.example.what_the_fantasy.ui.screens.QuizPage import com.example.what_the_fantasy.ui.screens.QuotePage import com.example.what_the_fantasy.ui.screens.SearchPage @@ -21,7 +23,12 @@ sealed class Destination(val route: String) { data object Accueil : Destination("Accueil") data object Favorite : Destination("Favorite") data object Profil : Destination("Profil") + data object QuizMenu : Destination("QuizMenu") data object Quiz : Destination("Quiz") + data object QuizEnd : Destination("QuizEnd/{idQuiz}/{pts}") { + // Ajout paramètres idQuiz et pts + fun createIdAndPts(idQuiz : Int, pts : Int) = "QuizEnd/$idQuiz/$pts" + } data object Quote : Destination("Quote") data object Search : Destination("Search") data object SignUp : Destination("SignUp") @@ -32,7 +39,7 @@ sealed class Destination(val route: String) { fun AppNavigator() { val navController = rememberNavController() - NavHost(navController, startDestination = Destination.Login.route) { + NavHost(navController, startDestination = Destination.QuizMenu.route) { composable(Destination.Login.route) { LoginPage( navControllerSignUp = { navController.navigate(Destination.SignUp.route) }, @@ -42,7 +49,23 @@ fun AppNavigator() { composable(Destination.Accueil.route) { AccueilPage() } composable(Destination.Favorite.route) { FavoritePage() } composable(Destination.Profil.route) { ProfilPage(navController) } - composable(Destination.Quiz.route) { QuizPage() } + composable(Destination.QuizMenu.route) { + QuizMenu( + navControllerQuiz = { navController.navigate(Destination.Quiz.route) } + ) + } + composable(Destination.Quiz.route) { + QuizPage( + navControllerQuizEnd = { idQuiz, pts -> + navController.navigate(Destination.QuizEnd.createIdAndPts(idQuiz, pts)) + } + ) + } + composable(Destination.QuizEnd.route) { backStackEntry -> + val idQuiz = backStackEntry.arguments?.getString("idQuiz")?.toInt() ?: 0 + val pts = backStackEntry.arguments?.getString("pts")?.toInt() ?: 0 + QuizEndPage(idQuiz, pts) + } composable(Destination.Quote.route) { QuotePage() } composable(Destination.Search.route) { SearchPage() } composable(Destination.SignUp.route) { SignUpPage(navController) } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt index f6e1023..252b217 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt @@ -22,8 +22,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType @@ -31,10 +29,6 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.navigation.NavController -import androidx.navigation.compose.rememberNavController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable import com.example.what_the_fantasy.R import com.example.what_the_fantasy.data.local.UserStub import com.example.what_the_fantasy.data.model.User @@ -49,7 +43,6 @@ fun LoginPage(navControllerSignUp: () -> Unit, navControllerProfil: () -> Unit) val users = UserStub.allUsers; - Box( modifier = Modifier .fillMaxSize() diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt index 359e7f7..686a127 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt @@ -34,7 +34,7 @@ val gradient = Brush.linearGradient( @Composable -fun QuizEndPage(points: Int, idQuiz: Int) { +fun QuizEndPage(idQuiz: Int, points: Int) { Column( modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) ) { diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt similarity index 80% rename from What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt rename to What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt index b237afd..08225f0 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizMenu.kt @@ -19,15 +19,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import androidx.navigation.NavController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController import com.example.what_the_fantasy.R @Composable -fun QuizAccueil(navController: NavController) { +fun QuizMenu(navControllerQuiz: () -> Unit) { Row( modifier = Modifier .fillMaxSize() @@ -47,7 +43,7 @@ fun QuizAccueil(navController: NavController) { .size(width = 150.dp, height = 100.dp) .padding(8.dp) .clickable { - navController.navigate("quizPage") + navControllerQuiz() } ) { Image( @@ -63,8 +59,7 @@ fun QuizAccueil(navController: NavController) { .size(width = 150.dp, height = 100.dp) .padding(8.dp) .clickable { - - navController.navigate("quizPage") + navControllerQuiz() } ) { Image( @@ -89,7 +84,7 @@ fun QuizAccueil(navController: NavController) { .size(width = 150.dp, height = 100.dp) .padding(8.dp) .clickable { - navController.navigate("quizPage") + navControllerQuiz() } ) { Image( @@ -105,7 +100,7 @@ fun QuizAccueil(navController: NavController) { .size(width = 150.dp, height = 100.dp) .padding(8.dp) .clickable { - navController.navigate("quizPage") + navControllerQuiz() } ) { Image( @@ -119,21 +114,4 @@ fun QuizAccueil(navController: NavController) { Spacer(modifier = Modifier.weight(0.1f)) } -} - -@Composable -fun QuizApp() { - val navController = rememberNavController() - - NavHost(navController = navController, startDestination = "quizEndPage") { - composable("quizAccueil") { - QuizAccueil(navController = navController) - } - composable("quizPage") { - QuizPage(navController = navController) - } - composable("quizEndPage") { - QuizEndPage(5, 1) - } - } } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt index 4317669..b1d9dc7 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt @@ -4,11 +4,6 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -18,11 +13,10 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.navigation.NavController import com.example.what_the_fantasy.data.local.QuestionStub @Composable -fun QuizPage(navController: NavController) { +fun QuizPage(navControllerQuizEnd: (Int, Int) -> Unit) { val questions = QuestionStub.allQuestions var idCurrentQuestion by remember { mutableIntStateOf(0) } var pts by remember { mutableIntStateOf(0) } @@ -44,7 +38,7 @@ fun QuizPage(navController: NavController) { if (answer == correctAnswer) pts++ if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++ - else navController.popBackStack() // Retour menu + else navControllerQuizEnd(0, pts) // Retour menu } Box( @@ -66,12 +60,12 @@ fun QuizPage(navController: NavController) { Box( modifier = Modifier.fillMaxWidth() ) { - IconButton( + /*IconButton( onClick = { navController.popBackStack() }, modifier = Modifier.align(Alignment.TopStart) ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Retour", tint = Color.White) - } + }*/ } Text("Question ${question.id}", color = Color.White, fontSize = 18.sp, modifier = Modifier.padding(top = 20.dp)) Text("Points : $pts", color = Color.White, fontSize = 18.sp, modifier = Modifier.padding(top = 40.dp))