添加新的表单文本输入组件 FormTextInput2,包含错误提示和动态显示功能;新增图标和图片资源。

This commit is contained in:
weber
2025-08-05 13:56:03 +08:00
parent 29d2bb753f
commit 3e544844bb
22 changed files with 712 additions and 116 deletions

View File

@@ -62,16 +62,16 @@ fun Agent() {
) {
Row(
modifier = Modifier
.height(36.dp) // 设置高度为36dp
.fillMaxWidth(), // 占据整行宽度
.height(36.dp)
.fillMaxWidth(),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.Bottom
) {
// 搜索框 - 占据剩余空间
// 搜索框
Row(
modifier = Modifier
.height(36.dp)
.weight(1f) // 权重为1占据剩余空间
.weight(1f)
.clip(shape = RoundedCornerShape(18.dp))
.background(AppColors.inputBackground)
.padding(horizontal = 8.dp, vertical = 0.dp)
@@ -94,16 +94,13 @@ fun Agent() {
)
}
}
// 间隔
Spacer(modifier = Modifier.width(16.dp))
// 新增
Icon(
modifier = Modifier
.size(36.dp)
.noRippleClickable {
// 图标点击事件
//
navController.navigate(
NavigationRoute.AddAgent.route
)

View File

@@ -1,6 +1,7 @@
package com.aiosman.ravenow.ui.index.tabs.message
import android.widget.Toast
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@@ -14,7 +15,10 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ExperimentalMaterialApi
@@ -28,6 +32,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -60,13 +65,15 @@ import kotlinx.coroutines.launch
/**
* 消息列表界面
*/
@OptIn(ExperimentalMaterialApi::class)
@OptIn(ExperimentalMaterialApi::class, ExperimentalFoundationApi::class)
@Composable
fun NotificationsScreen() {
val AppColors = LocalAppTheme.current
val navController = LocalNavController.current
val systemUiController = rememberSystemUiController()
val context = LocalContext.current
var pagerState = rememberPagerState (pageCount = { 4 })
var scope = rememberCoroutineScope()
val state = rememberPullRefreshState(MessageListViewModel.isLoading, onRefresh = {
MessageListViewModel.viewModelScope.launch {
MessageListViewModel.initData(context, force = true, loadChat = AppState.enableChat)
@@ -96,10 +103,9 @@ fun NotificationsScreen() {
.padding(horizontal = 15.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically
) {
// 左侧占位元素
Box(modifier = Modifier.size(24.dp))
// 左侧 Columnlabel 居中显示
Column(
modifier = Modifier
.weight(1f)
@@ -113,7 +119,7 @@ fun NotificationsScreen() {
color = AppColors.text
)
}
// 右侧图标
Image(
painter = painterResource(id = R.drawable.rider_pro_group),
contentDescription = "add",
@@ -169,8 +175,111 @@ fun NotificationsScreen() {
navController.navigate(NavigationRoute.CommentNoticeScreen.route)
}
}
HorizontalDivider(color = AppColors.divider, modifier = Modifier.padding(16.dp))
Box(
Row(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.padding(horizontal = 16.dp),
// center the tabs
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.Bottom
) {
Column(
modifier = Modifier
.noRippleClickable {
scope.launch {
pagerState.animateScrollToPage(0)
}
},
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = stringResource(R.string.chat_ai),
fontSize = 14.sp,
color = if (pagerState.currentPage == 0) AppColors.mainText else AppColors.checkedBackground,
modifier = Modifier
.clip(RoundedCornerShape(8.dp))
.background(if (pagerState.currentPage == 0) AppColors.checkedBackground else AppColors.unCheckedBackground)
.padding(horizontal = 11.dp, vertical = 4.dp)
)
}
Spacer(modifier = Modifier.width(8.dp))
Column(
modifier = Modifier
.noRippleClickable {
scope.launch {
pagerState.animateScrollToPage(1)
}
},
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
androidx.compose.material.Text(
text = stringResource(R.string.chat_group),
fontSize = 14.sp,
color = if (pagerState.currentPage == 1) AppColors.mainText else AppColors.checkedBackground,
modifier = Modifier
.clip(RoundedCornerShape(8.dp))
.background(if (pagerState.currentPage == 1) AppColors.checkedBackground else AppColors.unCheckedBackground)
.padding(horizontal = 11.dp, vertical = 4.dp)
)
}
Spacer(modifier = Modifier.width(8.dp))
Column(
modifier = Modifier
.noRippleClickable {
scope.launch {
pagerState.animateScrollToPage(2)
}
},
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
androidx.compose.material.Text(
text = stringResource(R.string.chat_friend),
fontSize = 14.sp,
color = if (pagerState.currentPage == 2) AppColors.mainText else AppColors.checkedBackground,
modifier = Modifier
.clip(RoundedCornerShape(8.dp))
.background(if (pagerState.currentPage == 2) AppColors.checkedBackground else AppColors.unCheckedBackground)
.padding(horizontal = 11.dp, vertical = 4.dp)
)
}
}
HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxWidth()
.weight(1f)
) {
when (it) {
0 -> {
}
1 -> {
}
2 -> {
}
}
}
/*Box(
modifier = Modifier
.weight(1f)
.fillMaxWidth(),
@@ -194,7 +303,7 @@ fun NotificationsScreen() {
)
}
}
}*/
}
PullRefreshIndicator(
MessageListViewModel.isLoading,
@@ -226,28 +335,14 @@ fun NotificationIndicator(
onClick()
}
) {
if (notificationCount > 0) {
Box(
modifier = Modifier
.background(AppColors.main, RoundedCornerShape(16.dp))
.padding(4.dp)
.align(Alignment.TopEnd)
) {
Text(
text = notificationCount.toString(),
color = AppColors.mainText,
fontSize = 10.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.align(Alignment.Center)
)
}
}
Column(
horizontalAlignment = Alignment.CenterHorizontally,
) {
Box(
modifier = Modifier
.size(64.dp)
.size(69.dp)
.padding(5.dp)
.background(color = backgroundColor,
shape = RoundedCornerShape(16.dp)),
contentAlignment = Alignment.Center
@@ -265,6 +360,22 @@ fun NotificationIndicator(
}
}
if (notificationCount > 0) {
Box(
modifier = Modifier
.background(AppColors.main, RoundedCornerShape(16.dp))
.padding(horizontal = 8.dp, vertical = 4.dp)
.align(Alignment.TopEnd)
) {
Text(
text = if (notificationCount > 99) "99+" else notificationCount.toString(),
color = AppColors.mainText,
fontSize = 10.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.align(Alignment.Center)
)
}
}
}
}