@@ -3,25 +3,33 @@ package com.example.eventtracker.ui.profile
3
3
import androidx.compose.foundation.clickable
4
4
import androidx.compose.foundation.gestures.Orientation
5
5
import androidx.compose.foundation.gestures.scrollable
6
+ import androidx.compose.foundation.layout.Arrangement
6
7
import androidx.compose.foundation.layout.Column
7
8
import androidx.compose.foundation.layout.Row
8
9
import androidx.compose.foundation.layout.Spacer
10
+ import androidx.compose.foundation.layout.fillMaxWidth
9
11
import androidx.compose.foundation.layout.height
10
12
import androidx.compose.foundation.layout.padding
11
13
import androidx.compose.foundation.layout.size
12
14
import androidx.compose.foundation.layout.width
15
+ import androidx.compose.foundation.lazy.LazyColumn
16
+ import androidx.compose.foundation.lazy.itemsIndexed
13
17
import androidx.compose.foundation.rememberScrollState
14
18
import androidx.compose.foundation.shape.CircleShape
15
19
import androidx.compose.foundation.shape.RoundedCornerShape
16
20
import androidx.compose.foundation.verticalScroll
21
+ import androidx.compose.material3.Button
22
+ import androidx.compose.material3.ButtonDefaults
17
23
import androidx.compose.material3.CenterAlignedTopAppBar
18
24
import androidx.compose.material3.ExperimentalMaterial3Api
19
25
import androidx.compose.material3.MaterialTheme
20
26
import androidx.compose.material3.Text
21
27
import androidx.compose.runtime.Composable
28
+ import androidx.compose.runtime.collectAsState
22
29
import androidx.compose.ui.Alignment
23
30
import androidx.compose.ui.Modifier
24
31
import androidx.compose.ui.draw.clip
32
+ import androidx.compose.ui.focus.focusModifier
25
33
import androidx.compose.ui.graphics.Color
26
34
import androidx.compose.ui.layout.ContentScale
27
35
import androidx.compose.ui.res.painterResource
@@ -30,11 +38,14 @@ import androidx.compose.ui.text.style.TextOverflow
30
38
import androidx.compose.ui.tooling.preview.Preview
31
39
import androidx.compose.ui.unit.dp
32
40
import androidx.compose.ui.unit.sp
41
+ import androidx.hilt.navigation.compose.hiltViewModel
33
42
import coil.compose.AsyncImage
34
43
import com.example.eventtracker.R
44
+ import com.example.eventtracker.model.EventData
35
45
36
46
@Composable
37
- fun ProfileScreen (modifier : Modifier = Modifier , name : String , email : String = "") {
47
+ fun ProfileScreen (modifier : Modifier = Modifier ,navigateToLogin : () -> Unit ) {
48
+ val viewModel: ProfileScreenViewModel = hiltViewModel()
38
49
Column (
39
50
modifier = Modifier
40
51
.verticalScroll(rememberScrollState())
@@ -49,11 +60,15 @@ fun ProfileScreen(modifier: Modifier = Modifier, name: String, email: String = "
49
60
error = painterResource(id = R .drawable.default_profile_image),
50
61
)
51
62
Spacer (modifier = Modifier .height(16 .dp))
52
- Text (text = name, fontWeight = FontWeight .Bold , style = MaterialTheme .typography.titleLarge)
63
+ Text (
64
+ text = viewModel.userName.collectAsState().value,
65
+ fontWeight = FontWeight .Bold ,
66
+ style = MaterialTheme .typography.titleLarge
67
+ )
53
68
54
69
Spacer (modifier = Modifier .height(8 .dp))
55
70
Text (
56
- text = " USN - 1DS23IS188 " ,
71
+ text = " USN - ${viewModel.userUsn.collectAsState().value} " ,
57
72
style = MaterialTheme .typography.bodyLarge,
58
73
color = Color .Gray
59
74
)
@@ -75,36 +90,57 @@ fun ProfileScreen(modifier: Modifier = Modifier, name: String, email: String = "
75
90
fontWeight = FontWeight .Bold ,
76
91
fontSize = 20 .sp
77
92
)
78
- EventList ()
93
+ EventList (events = viewModel.userEvents.collectAsState().value)
94
+ Spacer (modifier = Modifier .height(16 .dp))
95
+ Row (modifier = Modifier .fillMaxWidth(), horizontalArrangement = Arrangement .Center ) {
96
+ Button (
97
+ onClick = {
98
+ // viewModel.logOut()
99
+ navigateToLogin()
100
+ },
101
+ modifier = Modifier .fillMaxWidth(0.87f ),
102
+ shape = MaterialTheme .shapes.small,
103
+ colors = ButtonDefaults .buttonColors(Color .Black )
104
+ ) {
105
+ Text (text = " Logout" )
106
+ }
107
+
108
+ }
79
109
}
80
110
}
81
111
82
112
@Composable
83
- fun EventList (modifier : Modifier = Modifier ) {
84
- EventItem (eventName = " Introduction to Android Development" )
85
- EventItem (eventName = " Introduction to Android Development" )
86
- EventItem (eventName = " Introduction to Android Development" )
87
- EventItem (eventName = " Introduction to Android Development" )
88
- EventItem (eventName = " Introduction to Android Development" )
113
+ fun EventList (modifier : Modifier = Modifier , events : List <EventData >) {
114
+ Column () {
115
+ events.forEachIndexed { index, event ->
116
+ EventItem (event = event)
117
+ }
118
+ }
119
+ // EventItem(eventName = "Introduction to Android Development")
120
+ // EventItem(eventName = "Introduction to Android Development")
121
+ // EventItem(eventName = "Introduction to Android Development")
122
+ // EventItem(eventName = "Introduction to Android Development")
123
+ // EventItem(eventName = "Introduction to Android Development")
89
124
90
125
}
91
126
92
127
@Composable
93
- fun EventItem (modifier : Modifier = Modifier ,eventName : String ) {
94
- Row (modifier = modifier.padding(vertical = 16 .dp).clickable { /* TODO*/ }) {
128
+ fun EventItem (modifier : Modifier = Modifier , event : EventData ) {
129
+ Row (modifier = modifier
130
+ .padding(vertical = 16 .dp)
131
+ .clickable { /* TODO*/ }) {
95
132
AsyncImage (
96
- model = null ,
133
+ model = event.image ,
97
134
contentDescription = " Event image" ,
98
135
modifier = modifier
99
136
.clip(MaterialTheme .shapes.medium)
100
137
.height(70 .dp)
101
- .width(100 .dp)
102
- ,
138
+ .width(100 .dp),
103
139
error = painterResource(id = R .drawable.default_image),
104
140
contentScale = ContentScale .Crop
105
141
)
106
142
Spacer (modifier = Modifier .width(16 .dp))
107
- Text (text = eventName , overflow = TextOverflow .Ellipsis ,maxLines = 2 , fontSize = 18 .sp)
143
+ Text (text = event.name , overflow = TextOverflow .Ellipsis , maxLines = 2 , fontSize = 18 .sp)
108
144
}
109
145
}
110
146
@@ -114,8 +150,8 @@ fun ProfileScreenTopBar(modifier: Modifier = Modifier) {
114
150
CenterAlignedTopAppBar (title = { Text (text = " Profile" , fontWeight = FontWeight .Bold ) })
115
151
}
116
152
117
- @Preview
118
- @Composable
119
- fun ProfileScreenPreview () {
120
- ProfileScreen (name = " James" )
121
- }
153
+ // @Preview
154
+ // @Composable
155
+ // fun ProfileScreenPreview() {
156
+ // ProfileScreen(name = "James")
157
+ // }
0 commit comments