11package com.example.quizkit.ui.screen.home
22
33import androidx.compose.foundation.background
4+ import androidx.compose.foundation.clickable
45import androidx.compose.foundation.layout.Arrangement
56import androidx.compose.foundation.layout.Column
67import androidx.compose.foundation.layout.PaddingValues
@@ -21,10 +22,12 @@ import androidx.compose.material3.Button
2122import androidx.compose.material3.ButtonDefaults
2223import androidx.compose.material3.Card
2324import androidx.compose.material3.CardDefaults
25+ import androidx.compose.material3.ExperimentalMaterial3Api
2426import androidx.compose.material3.Icon
2527import androidx.compose.material3.Surface
2628import androidx.compose.material3.Text
2729import androidx.compose.runtime.Composable
30+ import androidx.compose.runtime.collectAsState
2831import androidx.compose.ui.Alignment
2932import androidx.compose.ui.Modifier
3033import androidx.compose.ui.draw.clip
@@ -36,69 +39,84 @@ import androidx.compose.ui.unit.dp
3639import androidx.compose.ui.unit.sp
3740import com.example.quizkit.R
3841import com.example.quizkit.ui.component.CardQuiz
42+ import org.koin.androidx.compose.koinViewModel
3943
4044@Composable
41- fun HomeScreen (innerPadding : PaddingValues = PaddingValues (20.dp)){
42- Column (
43- Modifier
44- .padding(innerPadding)
45- ) {
45+ fun HomeScreen (
46+ navigateToQuiz : (String ) -> Unit ,
47+ navigateToCategory : () -> Unit ,
48+ homeViewModel : HomeViewModel = koinViewModel()
49+ ) {
50+ Column {
4651 Column (Modifier .padding(20 .dp)) {
4752 Spacer (modifier = Modifier .height(16 .dp))
48- RecentBoard ()
53+ RecentBoard (homeViewModel, navigateToQuiz, navigateToCategory )
4954 Spacer (modifier = Modifier .height(16 .dp))
50- PlayBoard ()
55+ PlayBoard (navigateToCategory )
5156 }
52- PopularList ()
57+ PopularList (navigateToQuiz, navigateToCategory )
5358 }
5459}
5560
61+ @OptIn(ExperimentalMaterial3Api ::class )
5662@Composable
57- fun RecentBoard (){
58- val recentList = listOf<String >(" a" )
63+ fun RecentBoard (
64+ homeViewModel : HomeViewModel ,
65+ navigateToQuiz : (String ) -> Unit ,
66+ navigateToCategory : () -> Unit
67+ ) {
5968
60- Card (
61- modifier = Modifier
62- .fillMaxWidth()
63- .height(90 .dp),
64- colors = CardDefaults .cardColors(
65- containerColor = Color (0xFFE4EAFF ),
66- )
67- ) {
68- Row (
69- Modifier
69+ homeViewModel.getLatestHistory().collectAsState(initial = null ).value.let { history ->
70+ Card (
71+ modifier = Modifier
7072 .fillMaxWidth()
71- .padding(16 .dp),
72- horizontalArrangement = Arrangement .SpaceBetween ,
73- verticalAlignment = Alignment .CenterVertically ) {
74- Column (Modifier .fillMaxHeight(), verticalArrangement = Arrangement .Center ) {
75- Text (
76- text = if (recentList.isNotEmpty())" Recent Quiz" else " Lets Play Quiz" ,
77- fontWeight = FontWeight .Medium ,
78- fontSize = 24 .sp
79- )
80- if (recentList.isNotEmpty()){
73+ .height(90 .dp),
74+ colors = CardDefaults .cardColors(
75+ containerColor = Color (0xFFE4EAFF ),
76+ ),
77+ onClick = {
78+ if (history != null ) navigateToQuiz(history.category) else
79+ navigateToCategory()
80+ }
81+ ) {
82+ Row (
83+ Modifier
84+ .fillMaxWidth()
85+ .padding(16 .dp),
86+ horizontalArrangement = Arrangement .SpaceBetween ,
87+ verticalAlignment = Alignment .CenterVertically
88+ ) {
89+
90+ Column (Modifier .fillMaxHeight(), verticalArrangement = Arrangement .Center ) {
8191 Text (
82- text = " History - Education " ,
92+ text = if (history != null ) " Recent Quiz " else " Lets Play Quiz " ,
8393 fontWeight = FontWeight .Medium ,
84- fontSize = 18 .sp,
85- color = colorResource(id = R .color.text_purple)
94+ fontSize = 24 .sp
8695 )
87- }
96+ if (history != null ) {
97+ Text (
98+ text = " ${history.quiz} - ${history.category} " ,
99+ fontWeight = FontWeight .Medium ,
100+ fontSize = 18 .sp,
101+ color = colorResource(id = R .color.text_purple)
102+ )
103+ }
88104
89- }
90- Icon (
91- imageVector = Icons .Default .KeyboardArrowRight ,
92- contentDescription = " recent-play" ,
93- modifier = Modifier .size(30 .dp),
94- tint = colorResource(id = R .color.text_purple)
105+ }
106+ Icon (
107+ imageVector = Icons .Default .KeyboardArrowRight ,
108+ contentDescription = " recent-play" ,
109+ modifier = Modifier .size(30 .dp),
110+ tint = colorResource(id = R .color.text_purple)
95111 )
112+ }
113+
96114 }
97115 }
98116}
99117
100118@Composable
101- fun PlayBoard () {
119+ fun PlayBoard (navigateToCategory : () -> Unit ) {
102120 Surface (color = Color (0x4DF1F4FF ), shape = RoundedCornerShape (12 )) {
103121 Column (
104122 Modifier
@@ -116,7 +134,7 @@ fun PlayBoard(){
116134 )
117135 Spacer (modifier = Modifier .height(8 .dp))
118136 Button (
119- onClick = { /* TODO */ } ,
137+ onClick = navigateToCategory ,
120138 colors = ButtonDefaults .buttonColors(
121139 containerColor = Color .White ,
122140 contentColor = colorResource(id = R .color.text_purple)
@@ -129,7 +147,7 @@ fun PlayBoard(){
129147}
130148
131149@Composable
132- fun PopularList () {
150+ fun PopularList (navigateToQuiz : ( String ) -> Unit , navigateToCategory : () -> Unit ) {
133151 Surface (
134152 Modifier
135153 .fillMaxSize(),
@@ -139,8 +157,13 @@ fun PopularList(){
139157 Column (
140158 Modifier
141159 .padding(20 .dp)
142- .padding(top = 16 .dp)) {
143- Row (Modifier .fillMaxWidth(), horizontalArrangement = Arrangement .SpaceBetween , verticalAlignment = Alignment .Bottom ) {
160+ .padding(top = 16 .dp)
161+ ) {
162+ Row (
163+ Modifier .fillMaxWidth(),
164+ horizontalArrangement = Arrangement .SpaceBetween ,
165+ verticalAlignment = Alignment .Bottom
166+ ) {
144167 Text (
145168 text = " Popular Quiz" ,
146169 fontWeight = FontWeight .Medium ,
@@ -150,13 +173,14 @@ fun PopularList(){
150173 text = " See All" ,
151174 fontWeight = FontWeight .Medium ,
152175 fontSize = 18 .sp,
153- color = colorResource(id = R .color.text_purple)
176+ color = colorResource(id = R .color.text_purple),
177+ modifier = Modifier .clickable { navigateToCategory() }
154178 )
155179 }
156180 Column {
157181 Spacer (modifier = Modifier .height(12 .dp))
158- CardQuiz ()
159- CardQuiz ()
182+ CardQuiz (" Education " , " Geography " , navigateToQuiz )
183+ CardQuiz (" Showbiz " , " Video Games " , navigateToQuiz )
160184 }
161185 }
162186 }
0 commit comments