feat:优化我的页面排版

This commit is contained in:
amos
2025-12-19 17:23:02 +08:00
parent 6fc8d5cfd1
commit 128e1063f3
2 changed files with 88 additions and 109 deletions

View File

@@ -13,11 +13,11 @@ android {
applicationId = "com.memory.app"
minSdk = 26
targetSdk = 35
versionCode = 13
versionName = "1.2.9"
versionCode = 14
versionName = "1.3.0"
buildConfigField("String", "API_BASE_URL", "\"https://x.amos.us.kg/api/\"")
buildConfigField("int", "VERSION_CODE", "13")
buildConfigField("int", "VERSION_CODE", "14")
}
signingConfigs {

View File

@@ -17,6 +17,7 @@ import androidx.compose.material.icons.filled.CameraAlt
import androidx.compose.material.icons.outlined.DarkMode
import androidx.compose.material.icons.outlined.Edit
import androidx.compose.material.icons.outlined.LightMode
import androidx.compose.material.icons.outlined.Logout
import androidx.compose.material.icons.outlined.Notifications
import androidx.compose.material.icons.outlined.SystemUpdate
import androidx.compose.material3.*
@@ -73,128 +74,106 @@ fun ProfileScreen(
.background(MaterialTheme.colorScheme.background)
.verticalScroll(rememberScrollState())
) {
// Header with theme toggle and logout button
// Header with icon buttons
Row(
modifier = Modifier
.fillMaxWidth()
.statusBarsPadding()
.padding(horizontal = 20.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
horizontalArrangement = Arrangement.End,
verticalAlignment = Alignment.CenterVertically
) {
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
// Theme Toggle Button
Surface(
onClick = { onToggleTheme?.invoke() },
shape = RoundedCornerShape(50),
color = MaterialTheme.colorScheme.surfaceVariant
// Notification Button with badge
Box {
Box(
modifier = Modifier
.size(40.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f))
.clickable { onNotificationClick?.invoke() },
contentAlignment = Alignment.Center
) {
Row(
modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = if (isDarkTheme) Icons.Outlined.DarkMode else Icons.Outlined.LightMode,
contentDescription = "切换主题",
modifier = Modifier.size(18.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.width(6.dp))
Text(
text = if (isDarkTheme) "深色" else "浅色",
color = MaterialTheme.colorScheme.onSurfaceVariant,
fontSize = 14.sp,
fontWeight = FontWeight.Medium
)
}
Icon(
imageVector = Icons.Outlined.Notifications,
contentDescription = "消息",
modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
}
// Check Update Button
Surface(
onClick = { onCheckUpdate?.invoke() },
shape = RoundedCornerShape(50),
color = MaterialTheme.colorScheme.surfaceVariant
) {
Row(
modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically
if (unreadCount > 0) {
Box(
modifier = Modifier
.align(Alignment.TopEnd)
.offset(x = 2.dp, y = (-2).dp)
.size(16.dp)
.clip(CircleShape)
.background(ErrorRed),
contentAlignment = Alignment.Center
) {
Icon(
imageVector = Icons.Outlined.SystemUpdate,
contentDescription = "检查更新",
modifier = Modifier.size(18.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.width(6.dp))
Text(
text = "更新",
color = MaterialTheme.colorScheme.onSurfaceVariant,
fontSize = 14.sp,
fontWeight = FontWeight.Medium
text = if (unreadCount > 99) "99+" else unreadCount.toString(),
color = Color.White,
fontSize = 9.sp,
fontWeight = FontWeight.Bold
)
}
}
// Notification Button
Surface(
onClick = { onNotificationClick?.invoke() },
shape = RoundedCornerShape(50),
color = MaterialTheme.colorScheme.surfaceVariant
) {
Box {
Row(
modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = Icons.Outlined.Notifications,
contentDescription = "消息",
modifier = Modifier.size(18.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.width(6.dp))
Text(
text = "消息",
color = MaterialTheme.colorScheme.onSurfaceVariant,
fontSize = 14.sp,
fontWeight = FontWeight.Medium
)
}
// Unread badge
if (unreadCount > 0) {
Box(
modifier = Modifier
.align(Alignment.TopEnd)
.offset(x = 4.dp, y = (-4).dp)
.size(18.dp)
.clip(CircleShape)
.background(ErrorRed),
contentAlignment = Alignment.Center
) {
Text(
text = if (unreadCount > 99) "99+" else unreadCount.toString(),
color = Color.White,
fontSize = 10.sp,
fontWeight = FontWeight.Bold
)
}
}
}
}
}
// Logout Button
Surface(
onClick = onLogout,
shape = RoundedCornerShape(50),
color = ErrorRed.copy(alpha = 0.1f)
Spacer(modifier = Modifier.width(12.dp))
// Theme Toggle
Box(
modifier = Modifier
.size(40.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f))
.clickable { onToggleTheme?.invoke() },
contentAlignment = Alignment.Center
) {
Text(
text = "退出登录",
color = ErrorRed,
fontSize = 14.sp,
fontWeight = FontWeight.Medium,
modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)
Icon(
imageVector = if (isDarkTheme) Icons.Outlined.DarkMode else Icons.Outlined.LightMode,
contentDescription = "切换主题",
modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
}
Spacer(modifier = Modifier.width(12.dp))
// Check Update
Box(
modifier = Modifier
.size(40.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f))
.clickable { onCheckUpdate?.invoke() },
contentAlignment = Alignment.Center
) {
Icon(
imageVector = Icons.Outlined.SystemUpdate,
contentDescription = "检查更新",
modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
}
Spacer(modifier = Modifier.width(12.dp))
// Logout
Box(
modifier = Modifier
.size(40.dp)
.clip(CircleShape)
.background(ErrorRed.copy(alpha = 0.1f))
.clickable { onLogout() },
contentAlignment = Alignment.Center
) {
Icon(
imageVector = Icons.Outlined.Logout,
contentDescription = "退出登录",
modifier = Modifier.size(20.dp),
tint = ErrorRed
)
}
}