Загрузка данных
package com.monika.orangesky
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@Composable
fun HomeScreen(onUserClick: (String) -> Unit, onLogout: () -> Unit) {
var selectedTab by remember { mutableStateOf(0) }
val winterIceBlue = Color(0xFF1E3F66)
val snowBackground = Color(0xFFF0F4F8)
val iceSubtle = Color(0xFFD8E2EC)
Column(
modifier = Modifier
.fillMaxSize()
.background(snowBackground)
) {
Row(
modifier = Modifier
.fillMaxWidth()
.background(winterIceBlue)
.padding(12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text("❄️ the facebook", color = Color.White, fontWeight = FontWeight.Bold, fontSize = 20.sp)
TextButton(onClick = onLogout) {
Text("Logout", color = Color.White)
}
}
Row(modifier = Modifier.fillMaxWidth().background(iceSubtle)) {
TabButton("Directory", selectedTab == 0) { selectedTab = 0 }
TabButton("❄️ Winter Wall", selectedTab == 1) { selectedTab = 1 }
}
if (selectedTab == 0) {
LazyColumn(
modifier = Modifier.fillMaxSize().padding(8.dp),
verticalArrangement = Arrangement.spacedBy(6.dp)
) {
item {
Text(
"❄️ Harvard Directory — Winter Term 2004",
fontWeight = FontWeight.Bold,
color = Color.DarkGray,
modifier = Modifier.padding(4.dp)
)
}
items(DataSource.users) { user ->
Card(
colors = CardDefaults.cardColors(containerColor = Color.White),
elevation = CardDefaults.cardElevation(2.dp),
modifier = Modifier
.fillMaxWidth()
.clickable { onUserClick(user.id) }
) {
Column(modifier = Modifier.padding(12.dp)) {
Text(user.name, fontWeight = FontWeight.Bold, color = winterIceBlue, fontSize = 16.sp)
Text("House: ${user.house}", fontSize = 12.sp, color = Color.Gray)
Text("Status: ${user.status}", fontSize = 14.sp, modifier = Modifier.padding(top = 4.dp))
}
}
}
}
} else {
var newPostText by remember { mutableStateOf("") }
Column(modifier = Modifier.fillMaxSize().padding(8.dp)) {
Card(
colors = CardDefaults.cardColors(containerColor = Color.White),
modifier = Modifier.fillMaxWidth()
) {
Column(modifier = Modifier.padding(8.dp)) {
OutlinedTextField(
value = newPostText,
onValueChange = { newPostText = it },
label = { Text("Post a New Year note...") },
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(4.dp))
Button(
onClick = {
if (newPostText.isNotBlank()) {
DataSource.wallPosts.add(
0,
WallPost(
id = System.currentTimeMillis().toString(),
authorName = "You",
text = "❄️ $newPostText",
time = "Just now"
)
)
newPostText = ""
}
},
colors = ButtonDefaults.buttonColors(containerColor = winterIceBlue)
) {
Text("Post to Wall")
}
}
}
Spacer(modifier = Modifier.height(8.dp))
LazyColumn(
verticalArrangement = Arrangement.spacedBy(6.dp),
modifier = Modifier.fillMaxSize()
) {
items(DataSource.wallPosts) { post ->
Card(
colors = CardDefaults.cardColors(containerColor = Color.White),
modifier = Modifier.fillMaxWidth()
) {
Column(modifier = Modifier.padding(10.dp)) {
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth()
) {
Text(post.authorName, fontWeight = FontWeight.Bold, color = winterIceBlue, fontSize = 13.sp)
Text(post.time, fontSize = 10.sp, color = Color.Gray)
}
Text(post.text, fontSize = 14.sp, modifier = Modifier.padding(top = 2.dp))
}
}
}
}
}
}
}
}
@Composable
fun RowScope.TabButton(text: String, selected: Boolean, onClick: () -> Unit) {
Button(
onClick = onClick,
colors = ButtonDefaults.buttonColors(
containerColor = if (selected) Color(0xFF1E3F66) else Color.Transparent
),
shape = androidx.compose.foundation.shape.RoundedCornerShape(0.dp),
modifier = Modifier.weight(1.dp)
) {
Text(text, color = if (selected) Color.White else Color.DarkGray, fontSize = 12.sp)
}
}