修正个人信息主页

This commit is contained in:
2024-10-07 11:10:10 +08:00
parent c617e0e668
commit e8c20028af

View File

@@ -1,11 +1,8 @@
package com.aiosman.riderpro.ui.index.tabs.profile package com.aiosman.riderpro.ui.index.tabs.profile
import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
@@ -53,7 +50,9 @@ import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
@@ -110,6 +109,7 @@ fun ProfileV3(
var enabled by remember { mutableStateOf(true) } var enabled by remember { mutableStateOf(true) }
val statusBarPaddingValues = WindowInsets.systemBars.asPaddingValues() val statusBarPaddingValues = WindowInsets.systemBars.asPaddingValues()
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
var minibarExpanded by remember { mutableStateOf(false) }
val context = LocalContext.current val context = LocalContext.current
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val navController = LocalNavController.current val navController = LocalNavController.current
@@ -126,6 +126,8 @@ fun ProfileV3(
val refreshState = rememberPullRefreshState(model.refreshing, onRefresh = { val refreshState = rememberPullRefreshState(model.refreshing, onRefresh = {
model.loadProfile(pullRefresh = true) model.loadProfile(pullRefresh = true)
}) })
var miniToolbarHeight by remember { mutableStateOf(0) }
val density = LocalDensity.current
Box( Box(
modifier = Modifier.pullRefresh(refreshState) modifier = Modifier.pullRefresh(refreshState)
) { ) {
@@ -141,49 +143,29 @@ fun ProfileV3(
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(miniToolbarHeight.dp)
// 保持在最低高度和当前高度之间 // 保持在最低高度和当前高度之间
.background(Color(0xfff8f8f8)) .background(Color(0xfff8f8f8))
.padding(horizontal = 16.dp)
) { ) {
StatusBarSpacer()
Row(
modifier = Modifier,
verticalAlignment = Alignment.CenterVertically
) {
CustomAsyncImage(
LocalContext.current,
profile?.avatar,
modifier = Modifier
.size(48.dp)
.clip(CircleShape),
contentDescription = "",
contentScale = ContentScale.Crop
)
Spacer(modifier = Modifier.width(16.dp))
androidx.compose.material3.Text(
text = profile?.nickName ?: "",
fontSize = 16.sp,
fontWeight = FontWeight.W600,
color = Color.Black
)
}
Spacer(modifier = Modifier.height(8.dp))
} }
// header
Box( Box(
modifier = Modifier modifier = Modifier
.parallax(0.5f) .parallax(0.5f)
.fillMaxWidth() .fillMaxWidth()
.height(600.dp) .height(600.dp)
.graphicsLayer { .verticalScroll(toolbarScrollState)
// change alpha of Image as the toolbar expands ) {
alpha = state.toolbarState.progress Box(
}.verticalScroll(toolbarScrollState) modifier = Modifier.fillMaxSize()
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.graphicsLayer {
alpha = state.toolbarState.progress
}
) { ) {
// banner // banner
Box( Box(
@@ -195,7 +177,7 @@ fun ProfileV3(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.let { .let {
if (isSelf) { if (isSelf && state.toolbarState.progress == 0f) {
it.noRippleClickable { it.noRippleClickable {
Intent(Intent.ACTION_PICK).apply { Intent(Intent.ACTION_PICK).apply {
type = "image/*" type = "image/*"
@@ -263,7 +245,6 @@ fun ProfileV3(
tint = Color.Black tint = Color.Black
) )
} }
DropdownMenu( DropdownMenu(
expanded = expanded, expanded = expanded,
onDismissRequest = { expanded = false }, onDismissRequest = { expanded = false },
@@ -360,6 +341,102 @@ fun ProfileV3(
} }
} }
}
Column(
modifier = Modifier
.fillMaxWidth()
.graphicsLayer {
alpha = 1 - state.toolbarState.progress
}
.onGloballyPositioned {
miniToolbarHeight = with(density) {
it.size.height.toDp().value.toInt()
}
}
) {
StatusBarSpacer()
Row(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically
) {
CustomAsyncImage(
LocalContext.current,
profile?.avatar,
modifier = Modifier
.size(48.dp)
.clip(CircleShape),
contentDescription = "",
contentScale = ContentScale.Crop
)
Spacer(modifier = Modifier.width(16.dp))
androidx.compose.material3.Text(
text = profile?.nickName ?: "",
fontSize = 16.sp,
fontWeight = FontWeight.W600,
color = Color.Black
)
Spacer(modifier = Modifier.weight(1f))
Box(
modifier = Modifier
) {
Box(
modifier = Modifier
.padding(16.dp)
) {
Icon(
painter = painterResource(id = R.drawable.rider_pro_more_horizon),
contentDescription = "",
modifier = Modifier.noRippleClickable {
minibarExpanded = true
},
tint = Color.Black
)
}
DropdownMenu(
expanded = minibarExpanded,
onDismissRequest = { minibarExpanded = false },
width = 250,
menuItems = listOf(
MenuItem(
stringResource(R.string.logout),
R.mipmap.rider_pro_logout
) {
minibarExpanded = false
scope.launch {
onLogout()
navController.navigate(NavigationRoute.Login.route) {
popUpTo(NavigationRoute.Index.route) {
inclusive = true
}
}
}
},
MenuItem(
stringResource(R.string.change_password),
R.mipmap.rider_pro_change_password
) {
minibarExpanded = false
scope.launch {
navController.navigate(NavigationRoute.ChangePasswordScreen.route)
}
},
MenuItem(
stringResource(R.string.favourites),
R.drawable.rider_pro_favourite
) {
minibarExpanded = false
scope.launch {
navController.navigate(NavigationRoute.FavouriteList.route)
}
}
)
)
}
}
Spacer(modifier = Modifier.height(8.dp))
}
} }
) { ) {
Column { Column {