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.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()
}
}
}

@ -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) }

@ -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()

@ -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))
) {

@ -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)
}
}
}

@ -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))

Loading…
Cancel
Save