parent
d558fde6f3
commit
32a4827eb1
|
|
@ -13,18 +13,14 @@ import androidx.compose.animation.core.Animatable
|
|||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
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.width
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.img.rabbit.pages
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
|
|
@ -37,6 +40,7 @@ import androidx.compose.runtime.LaunchedEffect
|
|||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.runtime.mutableLongStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
|
|
@ -44,11 +48,13 @@ import androidx.compose.ui.Alignment
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.navigation.NavType
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import androidx.navigation.navArgument
|
||||
import com.img.rabbit.R
|
||||
import com.img.rabbit.pages.screen.HomeScreen
|
||||
|
|
@ -69,14 +75,15 @@ import com.img.rabbit.viewmodel.GeneralViewModel
|
|||
import com.img.rabbit.viewmodel.LoginViewModel
|
||||
|
||||
// 定义底部导航的标签页
|
||||
sealed class TabItem(val title: String, val normalIconRes: Int, val selectedIconRes: Int, val normalColor: Color, val selectedColor: Color) {
|
||||
object Home : TabItem("首页", R.mipmap.ic_home_normal, R.mipmap.ic_home_selected, Color(0xFFAAAAAA), Color(0xFF1A1A1A))
|
||||
object Mine : TabItem("我的", R.mipmap.ic_mine_normal, R.mipmap.ic_mine_selected, Color(0xFFAAAAAA), Color(0xFF1A1A1A))
|
||||
sealed class TabItem(val title: String, val router:String, val normalIconRes: Int, val selectedIconRes: Int, val normalColor: Color, val selectedColor: Color) {
|
||||
object Home : TabItem("首页", "home", R.mipmap.ic_home_normal, R.mipmap.ic_home_selected, Color(0xFFAAAAAA), Color(0xFF1A1A1A))
|
||||
object Mine : TabItem("我的", "mine", R.mipmap.ic_mine_normal, R.mipmap.ic_mine_selected, Color(0xFFAAAAAA), Color(0xFF1A1A1A))
|
||||
}
|
||||
|
||||
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
|
||||
@Composable
|
||||
fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewModel) {
|
||||
val context = LocalContext.current
|
||||
|
||||
val navController = rememberNavController()
|
||||
val networkStatus by generalViewModel.networkStatus.observeAsState(initial = true)
|
||||
|
|
@ -87,12 +94,11 @@ fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewMode
|
|||
)
|
||||
var selectedTab: TabItem by remember { mutableStateOf(TabItem.Home) }
|
||||
|
||||
// 监听返回事件
|
||||
val currentBackStackEntry = navController.currentBackStackEntry
|
||||
|
||||
LaunchedEffect(currentBackStackEntry) {
|
||||
// 获取当前路由状态
|
||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||
LaunchedEffect(navBackStackEntry) {
|
||||
// 当返回到MineScreen页面时执行的操作
|
||||
if (currentBackStackEntry?.destination?.route == "home") {
|
||||
if (navBackStackEntry?.destination?.route == "home") {
|
||||
// 显示TabBar
|
||||
generalViewModel.setNavigationBarVisible(true)
|
||||
}
|
||||
|
|
@ -158,14 +164,6 @@ fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewMode
|
|||
navController = navController,
|
||||
startDestination = ScreenRoute.Home.route
|
||||
) {
|
||||
// Main页面
|
||||
composable(ScreenRoute.Main.route) {
|
||||
MainScreen(
|
||||
generalViewModel = generalViewModel,
|
||||
loginViewModel = loginViewModel
|
||||
)
|
||||
}
|
||||
|
||||
// Tab页面
|
||||
composable(ScreenRoute.Home.route) {
|
||||
HomeScreen(
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package com.img.rabbit.pages.screen
|
||||
|
||||
import android.app.Activity
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
|
|
@ -22,7 +25,10 @@ import androidx.compose.foundation.verticalScroll
|
|||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableLongStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
|
@ -35,6 +41,7 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.img.rabbit.R
|
||||
import com.img.rabbit.route.ScreenRoute
|
||||
|
|
@ -45,12 +52,25 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
|
|||
val context = LocalContext.current
|
||||
val scrollState = rememberScrollState()
|
||||
|
||||
// 监听返回事件
|
||||
val currentBackStackEntry = navController.currentBackStackEntry
|
||||
// 获取当前路由状态
|
||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||
val currentRoute = navBackStackEntry?.destination?.route
|
||||
// 只有当当前路由处于首页 Tab 之一时,才激活 BackHandler
|
||||
var lastClickTime by remember { mutableLongStateOf(0L) }
|
||||
|
||||
LaunchedEffect(currentBackStackEntry) {
|
||||
BackHandler(enabled = (currentRoute == ScreenRoute.Home.route)) {
|
||||
val currentTime = System.currentTimeMillis()
|
||||
if (currentTime - lastClickTime > 2000) {
|
||||
Toast.makeText(context, "再按一次退出应用", Toast.LENGTH_SHORT).show()
|
||||
lastClickTime = currentTime
|
||||
} else {
|
||||
(context as? Activity)?.finish()
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(navBackStackEntry) {
|
||||
// 当返回到MineScreen页面时执行的操作
|
||||
if (currentBackStackEntry?.destination?.route == "home") {
|
||||
if (navBackStackEntry?.destination?.route == "home") {
|
||||
// 显示TabBar
|
||||
generalViewModel.setNavigationBarVisible(true)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
package com.img.rabbit.pages.screen
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
|
|
@ -24,6 +26,7 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableLongStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
|
|
@ -44,12 +47,14 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import coil3.compose.AsyncImage
|
||||
import com.img.rabbit.BuildConfig
|
||||
import com.img.rabbit.R
|
||||
import com.img.rabbit.provider.storage.GlobalStateManager
|
||||
import com.img.rabbit.provider.storage.PreferenceUtil
|
||||
import com.img.rabbit.route.ScreenRoute
|
||||
import com.img.rabbit.utils.AppUpdate
|
||||
import com.img.rabbit.viewmodel.GeneralViewModel
|
||||
import com.img.rabbit.viewmodel.LoginViewModel
|
||||
|
|
@ -71,15 +76,28 @@ fun MineScreen(
|
|||
var globalBind by mutableStateOf(GlobalStateManager(context).globalBindNotifyFlow().collectAsState(initial = false))
|
||||
var globalUnBind by mutableStateOf(GlobalStateManager(context).globalUnBindNotifyFlow().collectAsState(initial = false))
|
||||
|
||||
val vipMember by remember { mutableStateOf(false) }
|
||||
//val vipMember by remember { mutableStateOf(false) }
|
||||
var userInfo by remember { mutableStateOf(PreferenceUtil.getUserInfo()) }
|
||||
|
||||
// 监听返回事件
|
||||
val currentBackStackEntry = navController.currentBackStackEntry
|
||||
// 获取当前路由状态
|
||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||
val currentRoute = navBackStackEntry?.destination?.route
|
||||
// 只有当当前路由处于首页 Tab 之一时,才激活 BackHandler
|
||||
var lastClickTime by remember { mutableLongStateOf(0L) }
|
||||
|
||||
LaunchedEffect(currentBackStackEntry) {
|
||||
BackHandler(enabled = (currentRoute == ScreenRoute.Home.route || currentRoute == ScreenRoute.Mine.route)) {
|
||||
val currentTime = System.currentTimeMillis()
|
||||
if (currentTime - lastClickTime > 2000) {
|
||||
Toast.makeText(context, "再按一次退出应用", Toast.LENGTH_SHORT).show()
|
||||
lastClickTime = currentTime
|
||||
} else {
|
||||
(context as? Activity)?.finish()
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(navBackStackEntry) {
|
||||
// 当返回到MineScreen页面时执行的操作
|
||||
if (currentBackStackEntry?.destination?.route == "mine") {
|
||||
if (navBackStackEntry?.destination?.route == "mine") {
|
||||
// 显示TabBar
|
||||
generalViewModel.setNavigationBarVisible(true)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -418,7 +418,12 @@ fun CutoutScreen(navController: NavController) {
|
|||
} else {
|
||||
// 空状态
|
||||
Column(
|
||||
modifier = Modifier.align(Alignment.Center)
|
||||
modifier = Modifier.align(Alignment.Center).clickable(
|
||||
interactionSource = remember { MutableInteractionSource() },
|
||||
indication = null
|
||||
){
|
||||
imagePickerLauncher.launch("image/*")
|
||||
}
|
||||
) {
|
||||
Image(
|
||||
painter = painterResource(id = R.mipmap.ic_image_empty_pld),
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import androidx.compose.ui.unit.sp
|
|||
import androidx.navigation.NavController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.img.rabbit.R
|
||||
import com.img.rabbit.route.ScreenRoute
|
||||
|
||||
@Composable
|
||||
fun TitleBar(navController: NavController?, paddingValues: PaddingValues, title: String? = "", showSave: Boolean = false, showBreak: Boolean = true, onSubmit: (() -> Unit)? = null) {
|
||||
|
|
@ -50,8 +51,14 @@ fun TitleBar(navController: NavController?, paddingValues: PaddingValues, title:
|
|||
indication = null,
|
||||
interactionSource = remember { MutableInteractionSource() }
|
||||
) {
|
||||
// 获取当前路由状态
|
||||
val navBackStackEntry = navController?.currentBackStackEntry
|
||||
val currentRoute = navBackStackEntry?.destination?.route
|
||||
|
||||
if(currentRoute != ScreenRoute.Home.route && currentRoute != ScreenRoute.Mine.route){
|
||||
navController?.popBackStack()
|
||||
}
|
||||
}
|
||||
.padding(end = 26.dp)
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.img.rabbit.route
|
|||
// 定义导航路由
|
||||
sealed class ScreenRoute(val route: String) {
|
||||
//Main页面
|
||||
object Main : ScreenRoute("main")
|
||||
// object Main : ScreenRoute("main")
|
||||
//Tab页面
|
||||
object Home : ScreenRoute("home")
|
||||
object Mine : ScreenRoute("mine")
|
||||
|
|
|
|||
Loading…
Reference in New Issue