Add Navigation into Quiz pages

pull/24/head^2
tomivt 2 months ago
parent d165f1a39b
commit 407dd4f22a

@ -4,19 +4,8 @@ import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge 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.navigations.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.ProfilPage
import com.example.what_the_fantasy.ui.screens.QuizPage
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -26,7 +15,6 @@ class MainActivity : ComponentActivity() {
What_The_FantasyTheme { What_The_FantasyTheme {
AppNavigator() AppNavigator()
//QuizPage()
} }
} }
} }

@ -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.FavoritePage
import com.example.what_the_fantasy.ui.screens.LoginPage 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.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.QuizPage
import com.example.what_the_fantasy.ui.screens.QuotePage import com.example.what_the_fantasy.ui.screens.QuotePage
import com.example.what_the_fantasy.ui.screens.SearchPage 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 Accueil : Destination("Accueil")
data object Favorite : Destination("Favorite") data object Favorite : Destination("Favorite")
data object Profil : Destination("Profil") data object Profil : Destination("Profil")
data object QuizMenu : Destination("QuizMenu")
data object Quiz : Destination("Quiz") 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 Quote : Destination("Quote")
data object Search : Destination("Search") data object Search : Destination("Search")
data object SignUp : Destination("SignUp") data object SignUp : Destination("SignUp")
@ -32,7 +39,7 @@ sealed class Destination(val route: String) {
fun AppNavigator() { fun AppNavigator() {
val navController = rememberNavController() val navController = rememberNavController()
NavHost(navController, startDestination = Destination.Login.route) { NavHost(navController, startDestination = Destination.QuizMenu.route) {
composable(Destination.Login.route) { composable(Destination.Login.route) {
LoginPage( LoginPage(
navControllerSignUp = { navController.navigate(Destination.SignUp.route) }, navControllerSignUp = { navController.navigate(Destination.SignUp.route) },
@ -42,7 +49,23 @@ fun AppNavigator() {
composable(Destination.Accueil.route) { AccueilPage() } composable(Destination.Accueil.route) { AccueilPage() }
composable(Destination.Favorite.route) { FavoritePage() } composable(Destination.Favorite.route) { FavoritePage() }
composable(Destination.Profil.route) { ProfilPage(navController) } 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.Quote.route) { QuotePage() }
composable(Destination.Search.route) { SearchPage() } composable(Destination.Search.route) { SearchPage() }
composable(Destination.SignUp.route) { SignUpPage(navController) } composable(Destination.SignUp.route) { SignUpPage(navController) }

@ -22,8 +22,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip 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.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType 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.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.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.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
@ -49,7 +43,6 @@ fun LoginPage(navControllerSignUp: () -> Unit, navControllerProfil: () -> Unit)
val users = UserStub.allUsers; val users = UserStub.allUsers;
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()

@ -34,7 +34,7 @@ val gradient = Brush.linearGradient(
@Composable @Composable
fun QuizEndPage(points: Int, idQuiz: Int) { fun QuizEndPage(idQuiz: Int, points: Int) {
Column( Column(
modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B))
) { ) {

@ -19,15 +19,11 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp 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 import com.example.what_the_fantasy.R
@Composable @Composable
fun QuizAccueil(navController: NavController) { fun QuizMenu(navControllerQuiz: () -> Unit) {
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
@ -47,7 +43,7 @@ fun QuizAccueil(navController: NavController) {
.size(width = 150.dp, height = 100.dp) .size(width = 150.dp, height = 100.dp)
.padding(8.dp) .padding(8.dp)
.clickable { .clickable {
navController.navigate("quizPage") navControllerQuiz()
} }
) { ) {
Image( Image(
@ -63,8 +59,7 @@ fun QuizAccueil(navController: NavController) {
.size(width = 150.dp, height = 100.dp) .size(width = 150.dp, height = 100.dp)
.padding(8.dp) .padding(8.dp)
.clickable { .clickable {
navControllerQuiz()
navController.navigate("quizPage")
} }
) { ) {
Image( Image(
@ -89,7 +84,7 @@ fun QuizAccueil(navController: NavController) {
.size(width = 150.dp, height = 100.dp) .size(width = 150.dp, height = 100.dp)
.padding(8.dp) .padding(8.dp)
.clickable { .clickable {
navController.navigate("quizPage") navControllerQuiz()
} }
) { ) {
Image( Image(
@ -105,7 +100,7 @@ fun QuizAccueil(navController: NavController) {
.size(width = 150.dp, height = 100.dp) .size(width = 150.dp, height = 100.dp)
.padding(8.dp) .padding(8.dp)
.clickable { .clickable {
navController.navigate("quizPage") navControllerQuiz()
} }
) { ) {
Image( Image(
@ -120,20 +115,3 @@ fun QuizAccueil(navController: NavController) {
Spacer(modifier = Modifier.weight(0.1f)) 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)
}
}
}

@ -4,11 +4,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape 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.material3.Text
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment 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.graphics.Color
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.navigation.NavController
import com.example.what_the_fantasy.data.local.QuestionStub import com.example.what_the_fantasy.data.local.QuestionStub
@Composable @Composable
fun QuizPage(navController: NavController) { fun QuizPage(navControllerQuizEnd: (Int, Int) -> Unit) {
val questions = QuestionStub.allQuestions val questions = QuestionStub.allQuestions
var idCurrentQuestion by remember { mutableIntStateOf(0) } var idCurrentQuestion by remember { mutableIntStateOf(0) }
var pts by remember { mutableIntStateOf(0) } var pts by remember { mutableIntStateOf(0) }
@ -44,7 +38,7 @@ fun QuizPage(navController: NavController) {
if (answer == correctAnswer) pts++ if (answer == correctAnswer) pts++
if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++ if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++
else navController.popBackStack() // Retour menu else navControllerQuizEnd(0, pts) // Retour menu
} }
Box( Box(
@ -66,12 +60,12 @@ fun QuizPage(navController: NavController) {
Box( Box(
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) { ) {
IconButton( /*IconButton(
onClick = { navController.popBackStack() }, onClick = { navController.popBackStack() },
modifier = Modifier.align(Alignment.TopStart) modifier = Modifier.align(Alignment.TopStart)
) { ) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Retour", tint = Color.White) 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("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)) Text("Points : $pts", color = Color.White, fontSize = 18.sp, modifier = Modifier.padding(top = 40.dp))

Loading…
Cancel
Save