From 9c592ee62b554e3df16aa9d357b5d61937a75924 Mon Sep 17 00:00:00 2001 From: zhong <2724770085@qq.com> Date: Fri, 21 Nov 2025 18:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BD=91=E7=BB=9C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=BC=BA=E7=9C=81=E5=9B=BE=20=E5=B0=86=E7=BC=BA?= =?UTF-8?q?=E7=9C=81=E5=86=85=E5=AE=B9=E5=8D=95=E7=8B=AC=E5=86=99=E6=88=90?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E6=9B=BF=E6=8D=A2=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E9=A1=B5=E4=B8=AD=E7=9A=84=E7=BC=BA=E7=9C=81?= =?UTF-8?q?=E5=86=85=E5=AE=B9=EF=BC=8C=E9=81=BF=E5=85=8D=E5=A4=A7=E9=87=8F?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/comment/notice/CommentNotice.kt | 42 +---- .../ravenow/ui/favourite/FavouriteListPage.kt | 42 +---- .../ravenow/ui/follower/FollowerList.kt | 42 +---- .../ravenow/ui/follower/FollowerNotice.kt | 42 +---- .../ravenow/ui/follower/FollowingList.kt | 42 +---- .../tabs/message/tab/AgentChatListScreen.kt | 33 +--- .../tabs/message/tab/AllChatListScreen.kt | 33 +--- .../tabs/message/tab/FriendChatListScreen.kt | 33 +--- .../tabs/message/tab/GroupChatListScreen.kt | 33 +--- .../index/tabs/moment/tabs/timeline/Moment.kt | 38 +---- .../ui/index/tabs/search/SearchScreen.kt | 22 +-- .../com/aiosman/ravenow/ui/like/LikePage.kt | 41 +---- .../ravenow/ui/network/Networkerror.kt | 153 ++++++++++++++++++ 13 files changed, 203 insertions(+), 393 deletions(-) create mode 100644 app/src/main/java/com/aiosman/ravenow/ui/network/Networkerror.kt diff --git a/app/src/main/java/com/aiosman/ravenow/ui/comment/notice/CommentNotice.kt b/app/src/main/java/com/aiosman/ravenow/ui/comment/notice/CommentNotice.kt index 35b1c17..fcffc06 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/comment/notice/CommentNotice.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/comment/notice/CommentNotice.kt @@ -48,7 +48,7 @@ import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.ui.navigateToPost import kotlinx.coroutines.launch import com.aiosman.ravenow.utils.NetworkUtils -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContent @Composable fun CommentNoticeScreen(includeStatusBarPadding: Boolean = true){ val viewModel = viewModel( @@ -75,43 +75,11 @@ fun CommentNoticeScreen(includeStatusBarPadding: Boolean = true){ val isNetworkAvailable = NetworkUtils.isNetworkAvailable(LocalContext.current) if (!isNetworkAvailable) { - Box( - modifier = Modifier - .fillMaxSize() - .padding(top = 149.dp), - contentAlignment = Alignment.TopCenter - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - androidx.compose.foundation.Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(181.dp) - ) - Spacer(modifier = Modifier.size(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.size(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.text, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { - viewModel.initData(context, force = true) - } - ) + NetworkErrorContent( + onReload = { + viewModel.initData(context, force = true) } - } + ) } else if (comments.itemCount == 0 && comments.loadState.refresh is LoadState.NotLoading) { Box( modifier = Modifier diff --git a/app/src/main/java/com/aiosman/ravenow/ui/favourite/FavouriteListPage.kt b/app/src/main/java/com/aiosman/ravenow/ui/favourite/FavouriteListPage.kt index 2b2868a..2662bfc 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/favourite/FavouriteListPage.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/favourite/FavouriteListPage.kt @@ -42,7 +42,7 @@ import com.aiosman.ravenow.ui.composables.StatusBarSpacer import com.aiosman.ravenow.ui.favourite.FavouriteListViewModel.refreshPager import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.ui.navigateToPost -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContent import com.aiosman.ravenow.utils.NetworkUtils @OptIn(ExperimentalMaterialApi::class) @@ -84,43 +84,11 @@ fun FavouriteListPage() { var moments = dataFlow.collectAsLazyPagingItems() if (!isNetworkAvailable) { - Box( - modifier = Modifier - .fillMaxSize() - .padding(top=149.dp), - contentAlignment = Alignment.TopCenter - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(181.dp) - ) - Spacer(modifier = Modifier.size(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.size(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.secondaryText, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { - model.refreshPager(force = true) - } - ) + NetworkErrorContent( + onReload = { + model.refreshPager(force = true) } - } + ) } else if(moments.itemCount == 0) { Box( modifier = Modifier diff --git a/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerList.kt b/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerList.kt index 6cd6f05..2658d0e 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerList.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerList.kt @@ -42,7 +42,7 @@ import com.aiosman.ravenow.ui.comment.NoticeScreenHeader import com.aiosman.ravenow.ui.composables.StatusBarMaskLayout import kotlinx.coroutines.launch import com.aiosman.ravenow.utils.NetworkUtils -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContent @OptIn(ExperimentalMaterialApi::class) @Composable @@ -76,43 +76,11 @@ fun FollowerListScreen(userId: Int) { val isNetworkAvailable = NetworkUtils.isNetworkAvailable(LocalContext.current) if (!isNetworkAvailable) { - Box( - modifier = Modifier - .fillMaxSize() - .padding(top = 149.dp), - contentAlignment = Alignment.TopCenter - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(181.dp) - ) - Spacer(modifier = Modifier.size(24.dp)) - androidx.compose.material.Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = appColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.size(8.dp)) - androidx.compose.material.Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = appColors.text, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { - model.loadData(userId, true) - } - ) + NetworkErrorContent( + onReload = { + model.loadData(userId, true) } - } + ) } else if (users.itemCount == 0) { Box( modifier = Modifier diff --git a/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerNotice.kt b/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerNotice.kt index 5af260e..d4be489 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerNotice.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowerNotice.kt @@ -41,7 +41,7 @@ import com.aiosman.ravenow.ui.composables.CustomAsyncImage import com.aiosman.ravenow.ui.composables.FollowButton import com.aiosman.ravenow.ui.composables.StatusBarMaskLayout import com.aiosman.ravenow.ui.modifiers.noRippleClickable -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContent import kotlinx.coroutines.launch import com.aiosman.ravenow.utils.NetworkUtils @@ -68,43 +68,11 @@ fun FollowerNoticeScreen(includeStatusBarPadding: Boolean = true) { val isNetworkAvailable = NetworkUtils.isNetworkAvailable(LocalContext.current) if (!isNetworkAvailable) { - Box( - modifier = Modifier - .fillMaxSize() - .padding(top=149.dp), - contentAlignment = Alignment.TopCenter - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(181.dp) - ) - Spacer(modifier = Modifier.size(24.dp)) - androidx.compose.material.Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.size(8.dp)) - androidx.compose.material.Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.text, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { - model.reload(force = true) - } - ) + NetworkErrorContent( + onReload = { + model.reload(force = true) } - } + ) } else if (followers.itemCount == 0) { Box( modifier = Modifier diff --git a/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowingList.kt b/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowingList.kt index ae568c7..232a901 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowingList.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/follower/FollowingList.kt @@ -40,7 +40,7 @@ import com.aiosman.ravenow.exp.viewModelFactory import com.aiosman.ravenow.ui.NavigationRoute import com.aiosman.ravenow.ui.comment.NoticeScreenHeader import com.aiosman.ravenow.ui.composables.StatusBarMaskLayout -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContent import kotlinx.coroutines.launch import com.aiosman.ravenow.utils.NetworkUtils @@ -78,43 +78,11 @@ fun FollowingListScreen(userId: Int) { val isNetworkAvailable = NetworkUtils.isNetworkAvailable(LocalContext.current) if (!isNetworkAvailable) { - Box( - modifier = Modifier - .fillMaxSize() - .padding(top=149.dp), - contentAlignment = Alignment.TopCenter - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(181.dp) - ) - Spacer(modifier = Modifier.size(24.dp)) - androidx.compose.material.Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = appColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.size(8.dp)) - androidx.compose.material.Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = appColors.secondaryText, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { - model.loadData(userId, true) - } - ) + NetworkErrorContent( + onReload = { + model.loadData(userId, true) } - } + ) } else if(users.itemCount == 0) { Box( modifier = Modifier diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AgentChatListScreen.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AgentChatListScreen.kt index 52d8ea0..81667d3 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AgentChatListScreen.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AgentChatListScreen.kt @@ -49,7 +49,7 @@ import com.aiosman.ravenow.ui.composables.CustomAsyncImage import com.aiosman.ravenow.ui.composables.rememberDebouncer import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.utils.NetworkUtils -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContentCompact import com.airbnb.lottie.compose.LottieAnimation import com.airbnb.lottie.compose.LottieCompositionSpec import com.airbnb.lottie.compose.LottieConstants @@ -121,35 +121,8 @@ fun AgentChatListScreen() { overflow = TextOverflow.Ellipsis ) } else { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(120.dp) - ) - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.secondaryText, - fontSize = 14.sp, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 3, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { + NetworkErrorContentCompact( + onReload = { AgentChatListViewModel.refreshPager(context = context) } ) diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AllChatListScreen.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AllChatListScreen.kt index ba2e2be..14129a4 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AllChatListScreen.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/AllChatListScreen.kt @@ -42,7 +42,7 @@ import com.aiosman.ravenow.ui.composables.CustomAsyncImage import com.aiosman.ravenow.ui.composables.rememberDebouncer import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.utils.NetworkUtils -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContentCompact import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults import androidx.compose.ui.text.font.FontFamily @@ -247,35 +247,8 @@ fun AllChatListScreen() { overflow = TextOverflow.Ellipsis ) } else { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(120.dp) - ) - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.secondaryText, - fontSize = 14.sp, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 3, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { + NetworkErrorContentCompact( + onReload = { isLoading = true // 重新加载所有类型的数据 AgentChatListViewModel.refreshPager(context = context) diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/FriendChatListScreen.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/FriendChatListScreen.kt index 584fb96..ac618af 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/FriendChatListScreen.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/FriendChatListScreen.kt @@ -33,7 +33,7 @@ import com.aiosman.ravenow.LocalNavController import com.aiosman.ravenow.R import com.aiosman.ravenow.ui.composables.CustomAsyncImage import com.aiosman.ravenow.ui.composables.rememberDebouncer -import com.aiosman.ravenow.ui.index.tabs.search.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContentCompact import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.utils.NetworkUtils import androidx.compose.ui.text.style.TextAlign @@ -102,35 +102,8 @@ fun FriendChatListScreen() { overflow = TextOverflow.Ellipsis ) } else { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(120.dp) - ) - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.secondaryText, - fontSize = 14.sp, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 3, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { + NetworkErrorContentCompact( + onReload = { FriendChatListViewModel.refreshPager(pullRefresh = true, context = context) } ) diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/GroupChatListScreen.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/GroupChatListScreen.kt index 1e41b97..7f6f24d 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/GroupChatListScreen.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/message/tab/GroupChatListScreen.kt @@ -35,7 +35,7 @@ import com.aiosman.ravenow.ui.composables.CustomAsyncImage import com.aiosman.ravenow.ui.composables.rememberDebouncer import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.utils.NetworkUtils -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContentCompact @OptIn(ExperimentalMaterialApi::class) @Composable @@ -97,35 +97,8 @@ fun GroupChatListScreen() { overflow = TextOverflow.Ellipsis ) } else { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(120.dp) - ) - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.secondaryText, - fontSize = 14.sp, - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 24.dp), - maxLines = 3, - overflow = TextOverflow.Ellipsis - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { + NetworkErrorContentCompact( + onReload = { GroupChatListViewModel.refreshPager(context = context) } ) diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/moment/tabs/timeline/Moment.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/moment/tabs/timeline/Moment.kt index 0f40a14..995c435 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/moment/tabs/timeline/Moment.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/moment/tabs/timeline/Moment.kt @@ -47,6 +47,7 @@ import com.aiosman.ravenow.ui.composables.rememberDebouncer import kotlinx.coroutines.launch import com.aiosman.ravenow.utils.NetworkUtils import androidx.compose.ui.platform.LocalContext +import com.aiosman.ravenow.ui.network.NetworkErrorContentInline /** * 动态列表 @@ -90,38 +91,11 @@ fun TimelineMomentsList() { .padding(top = 188.dp), contentAlignment = Alignment.TopCenter ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - val exploreDebouncer = rememberDebouncer() - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(140.dp) - ) - Spacer(modifier = Modifier.size(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.size(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.size(16.dp)) - ExploreButton( - onClick = { - exploreDebouncer { - /* TODO: 添加点击事件处理 */ - } } - ) - } + NetworkErrorContentInline( + onReload = { + model.refreshPager(pullRefresh = true) + } + ) } } else if (moments.isEmpty()) { Box( diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/search/SearchScreen.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/search/SearchScreen.kt index a140e34..eea5e13 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/search/SearchScreen.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/search/SearchScreen.kt @@ -84,6 +84,7 @@ import com.aiosman.ravenow.ui.NavigationRoute import com.google.accompanist.systemuicontroller.rememberSystemUiController import kotlinx.coroutines.launch import com.aiosman.ravenow.utils.NetworkUtils +import com.aiosman.ravenow.ui.network.NetworkErrorContentInline @OptIn(ExperimentalFoundationApi::class) @@ -780,26 +781,7 @@ fun SearchPlaceholderContent( fontWeight = FontWeight.W600 ) } else { - androidx.compose.foundation.Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(140.dp) - ) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = appColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600 - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = appColors.secondaryText, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.size(16.dp)) - ReloadButton(onClick = onReload) + NetworkErrorContentInline(onReload = onReload) } } } diff --git a/app/src/main/java/com/aiosman/ravenow/ui/like/LikePage.kt b/app/src/main/java/com/aiosman/ravenow/ui/like/LikePage.kt index c2956f4..190d4cf 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/like/LikePage.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/like/LikePage.kt @@ -47,7 +47,7 @@ import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.ui.navigateToPost import java.util.Date import com.aiosman.ravenow.utils.NetworkUtils -import com.aiosman.ravenow.ui.network.ReloadButton +import com.aiosman.ravenow.ui.network.NetworkErrorContent @Preview @Composable fun LikeNoticeScreen(includeStatusBarPadding: Boolean = true) { @@ -77,42 +77,11 @@ fun LikeNoticeScreen(includeStatusBarPadding: Boolean = true) { val isNetworkAvailable = NetworkUtils.isNetworkAvailable(LocalContext.current) if (!isNetworkAvailable) { - Box( - modifier = Modifier.fillMaxSize() - .padding(top=149.dp), - contentAlignment = Alignment.TopCenter - ) { - Column( - modifier = Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Image( - painter = painterResource(id = R.mipmap.invalid_name_10), - contentDescription = "network error", - modifier = Modifier.size(181.dp) - ) - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_title), - color = AppColors.text, - fontSize = 16.sp, - fontWeight = FontWeight.W600, - ) - Spacer(modifier = Modifier.size(8.dp)) - Text( - text = stringResource(R.string.friend_chat_no_network_subtitle), - color = AppColors.text, - fontSize = 14.sp, - fontWeight = FontWeight.W400 - ) - Spacer(modifier = Modifier.height(16.dp)) - ReloadButton( - onClick = { - LikeNoticeViewModel.reload(force = true) - } - ) + NetworkErrorContent( + onReload = { + LikeNoticeViewModel.reload(force = true) } - } + ) } else if (likes.itemCount == 0) { Box( modifier = Modifier.fillMaxSize() diff --git a/app/src/main/java/com/aiosman/ravenow/ui/network/Networkerror.kt b/app/src/main/java/com/aiosman/ravenow/ui/network/Networkerror.kt new file mode 100644 index 0000000..eb1faf1 --- /dev/null +++ b/app/src/main/java/com/aiosman/ravenow/ui/network/Networkerror.kt @@ -0,0 +1,153 @@ +package com.aiosman.ravenow.ui.network + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.aiosman.ravenow.LocalAppTheme +import com.aiosman.ravenow.R + + +//关注、粉丝、通知、like界面网络缺省图 +@Composable +fun NetworkErrorContent( + onReload: () -> Unit, + modifier: Modifier = Modifier +) { + val AppColors = LocalAppTheme.current + + Box( + modifier = modifier + .fillMaxSize() + .padding(top = 149.dp), + contentAlignment = Alignment.TopCenter + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth() + ) { + Image( + painter = painterResource(id = R.mipmap.invalid_name_10), + contentDescription = "network error", + modifier = Modifier.size(181.dp) + ) + Spacer(modifier = Modifier.size(24.dp)) + Text( + text = stringResource(R.string.friend_chat_no_network_title), + color = AppColors.text, + fontSize = 16.sp, + fontWeight = FontWeight.W600 + ) + Spacer(modifier = Modifier.size(8.dp)) + Text( + text = stringResource(R.string.friend_chat_no_network_subtitle), + color = AppColors.text, + fontSize = 14.sp, + fontWeight = FontWeight.W400 + ) + Spacer(modifier = Modifier.height(16.dp)) + ReloadButton( + onClick = onReload + ) + } + } +} + +@Composable +fun NetworkErrorContentInline( + onReload: () -> Unit, + modifier: Modifier = Modifier +) { + val AppColors = LocalAppTheme.current + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = modifier.fillMaxWidth() + ) { + Image( + painter = painterResource(id = R.mipmap.invalid_name_10), + contentDescription = "network error", + modifier = Modifier.size(140.dp) + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.friend_chat_no_network_title), + color = AppColors.text, + fontSize = 16.sp, + fontWeight = FontWeight.W600 + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.friend_chat_no_network_subtitle), + color = AppColors.secondaryText, + fontSize = 14.sp, + fontWeight = FontWeight.W400 + ) + Spacer(modifier = Modifier.size(16.dp)) + ReloadButton( + onClick = onReload + ) + } +} + +//消息界面网络缺省图 +@Composable +fun NetworkErrorContentCompact( + onReload: () -> Unit, + modifier: Modifier = Modifier +) { + val AppColors = LocalAppTheme.current + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = modifier + ) { + Image( + painter = painterResource(id = R.mipmap.invalid_name_10), + contentDescription = "network error", + modifier = Modifier.size(120.dp) + ) + Spacer(modifier = Modifier.height(24.dp)) + Text( + text = stringResource(R.string.friend_chat_no_network_title), + color = AppColors.text, + fontSize = 16.sp, + fontWeight = FontWeight.W600, + textAlign = TextAlign.Center, + modifier = Modifier.padding(horizontal = 24.dp), + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.friend_chat_no_network_subtitle), + color = AppColors.secondaryText, + fontSize = 14.sp, + textAlign = TextAlign.Center, + modifier = Modifier.padding(horizontal = 24.dp), + maxLines = 3, + overflow = TextOverflow.Ellipsis + ) + Spacer(modifier = Modifier.height(16.dp)) + ReloadButton( + onClick = onReload + ) + } +} +