🤓​bon debut main manque seulement la DailyQuote

pull/45/head
Maxime ROCHER 2 months ago
parent c35948e2e6
commit 38038c7939

@ -50,6 +50,7 @@ android {
} }
dependencies { dependencies {
implementation("io.coil-kt:coil-compose:1.4.0")
implementation(libs.bcrypt) // pour hacher les mdp implementation(libs.bcrypt) // pour hacher les mdp
implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.lifecycle.runtime.ktx)

@ -1,59 +1,87 @@
package com.example.what_the_fantasy.ui.components package com.example.what_the_fantasy.ui.components
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.draw.clip
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.rememberAsyncImagePainter
import coil.compose.rememberImagePainter
import com.example.what_the_fantasy.data.model.Quote import com.example.what_the_fantasy.data.model.Quote
import com.example.what_the_fantasy.ui.theme.colorBackground
import com.example.what_the_fantasy.ui.theme.gradienBox
@Composable @Composable
fun QuoteLittle(quote: Quote, modifier: Modifier) { fun QuoteLittle(quote: Quote, modifier: Modifier = Modifier) {
Column(modifier = modifier.padding(10.dp).drawBehind { Row(
drawRoundRect( modifier = modifier
Color(70,190,115), .fillMaxWidth()
cornerRadius = CornerRadius(10.dp.toPx()) .padding(8.dp)
) .clip(RoundedCornerShape(16.dp))
}.size(500.dp, 600.dp)) .background(colorBackground)
{ ) {
Text( Image(
text = '"'+quote.content+'"' painter = rememberAsyncImagePainter(quote.imgUrl),
contentDescription = "Character Image",
contentScale = ContentScale.Crop,
modifier = Modifier
.size(width = 135.dp, height = 135.dp)
.clip(
RoundedCornerShape(
topStart = 12.dp,
bottomStart = 12.dp,
topEnd = 0.dp,
bottomEnd = 0.dp
) )
InfoQuoteText(
name = "@string/source",
text = quote.source
) )
InfoQuoteText(
name = "@string/charac",
text = quote.character
) )
}
}
@Composable Column(
fun InfoQuoteText(name : String, text : String){ modifier = Modifier
Column{ .weight(1f)
.height(135.dp)
.clip(
RoundedCornerShape(
topEnd = 12.dp,
bottomEnd = 12.dp
)
)
.background(gradienBox)
.padding(12.dp)
) {
Text( Text(
text = name text = quote.content,
color = Color.White,
fontSize = 16.sp,
maxLines = 2,
overflow = TextOverflow.Ellipsis
) )
Spacer(modifier = Modifier.height(8.dp))
Text( Text(
text = text, text = "Film : ${quote.source}",
modifier = Modifier color = Color.White,
.drawBehind { fontSize = 12.sp
drawRoundRect(
Color(255,255,255),
cornerRadius = CornerRadius(15.dp.toPx())
) )
} Text(
.padding(5.dp) text = "Personnage : ${quote.character}",
color = Color.White,
fontSize = 12.sp
) )
} }
}
} }

@ -64,20 +64,27 @@ fun AppNavigator() {
services services
) )
} }
composable(Destination.Accueil.route) { composable(Destination.Accueil.route) { backStackEntry ->
val userIndex = it.arguments?.getString("userIndex")?.toInt() ?: -1 val userIndex = backStackEntry.arguments?.getString("userIndex")?.toInt() ?: -1
AccueilPage( AccueilPage(
index = userIndex, index = userIndex,
navFavorite = { userIndex -> navFavorite = { userIndex ->
navController.navigate(Destination.Favorite.createRoute(userIndex)) // Passe l'index à Profil navController.navigate(Destination.Favorite.createRoute(userIndex)) {
popUpTo(Destination.Accueil.createRoute(userIndex)) { inclusive = false }
}
}, },
navQuiz = { userIndex -> navQuiz = { userIndex ->
navController.navigate(Destination.QuizMenu.createRoute(userIndex)) // Passe l'index à Profil navController.navigate(Destination.QuizMenu.createRoute(userIndex)) {
popUpTo(Destination.Accueil.createRoute(userIndex)) { inclusive = false }
}
}, },
navProfil = { userIndex -> navProfil = { userIndex ->
navController.navigate(Destination.Profil.createRoute(userIndex)) // Passe l'index à Profil navController.navigate(Destination.Profil.createRoute(userIndex)) {
popUpTo(Destination.Accueil.createRoute(userIndex)) { inclusive = false }
}
}
)
} }
) }
composable(Destination.Favorite.route) { composable(Destination.Favorite.route) {
val userIndex = it.arguments?.getString("userIndex")?.toInt() ?: -1 val userIndex = it.arguments?.getString("userIndex")?.toInt() ?: -1
FavoritePage( FavoritePage(

@ -1,41 +1,59 @@
package com.example.what_the_fantasy.ui.screens package com.example.what_the_fantasy.ui.screens
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Button
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import com.example.what_the_fantasy.data.local.QuoteStub
import com.example.what_the_fantasy.data.services.IServices
import com.example.what_the_fantasy.ui.components.NavBar import com.example.what_the_fantasy.ui.components.NavBar
import com.example.what_the_fantasy.ui.components.QuoteLittle
import com.example.what_the_fantasy.ui.theme.colorBackground import com.example.what_the_fantasy.ui.theme.colorBackground
@Composable @Composable
fun AccueilPage( fun AccueilPage(
index: Int, index: Int,
navFavorite:(Int) -> Unit, navFavorite: (Int) -> Unit,
navQuiz: (Int) -> Unit, navQuiz: (Int) -> Unit,
navProfil:(Int) -> Unit navProfil: (Int) -> Unit
) { ) {
NavBar(onAccueil = true, var itemCount by remember { mutableStateOf(15) } // On affiche 15 quotes au début
val quotes = QuoteStub.allQuotes.take(itemCount)
NavBar(
onAccueil = true,
index = index, index = index,
navControllerFavorite = navFavorite, navControllerFavorite = navFavorite,
navControllerAccueil = { }, navControllerAccueil = { },
navControllerProfil = navProfil, navControllerProfil = navProfil,
navControllerQuiz = navQuiz navControllerQuiz = navQuiz
){ ) {
Box( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(colorBackground), .background(colorBackground)
contentAlignment = Alignment.Center ) {
){ LazyColumn(modifier = Modifier.weight(1f)) {
Column { items(quotes) { quote ->
Text("Accueil", color = Color.White, fontSize = 20.sp) QuoteLittle(quote)
}
// Si on a encore des éléments à charger, on affiche le bouton
if (itemCount < QuoteStub.allQuotes.size) {
item {
Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
Button(onClick = { itemCount += 15 }) {
Text("Charger plus")
}
}
}
}
} }
} }
} }

Loading…
Cancel
Save