dm-padding message-10
This commit is contained in:
parent
47fb10d4e4
commit
fd6de1796f
3 changed files with 61 additions and 11 deletions
|
|
@ -12,10 +12,15 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
|
@ -32,10 +37,15 @@ import com.example.login_v3.home.setting.setting_detail_page.viewmodel.Theme_Vie
|
|||
|
||||
|
||||
import androidx.hilt.navigation.compose.hiltViewModel // 確保有引入 hiltViewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.login_v3.navigation.components.AppWallpaperBackground
|
||||
|
||||
@Composable
|
||||
fun MainScreen_tab(
|
||||
navController: NavHostController,
|
||||
// 注入 Theme_ViewModel 來讀取壁紙狀態
|
||||
themeViewModel: Theme_ViewModel = hiltViewModel()
|
||||
) {
|
||||
|
|
@ -64,7 +74,10 @@ fun MainScreen_tab(
|
|||
.fillMaxWidth()
|
||||
.height(navHeight)
|
||||
) {
|
||||
nav_Wheel_display_block(screensViewModel = screensViewModel)
|
||||
nav_Wheel_display_block(
|
||||
navController = navController,
|
||||
screensViewModel = screensViewModel
|
||||
)
|
||||
}
|
||||
Spacer(modifier = Modifier.height(gap))
|
||||
}
|
||||
|
|
@ -73,6 +86,7 @@ fun MainScreen_tab(
|
|||
}
|
||||
) { innerPadding ->
|
||||
Screens_NavGraph(
|
||||
navController = navController,
|
||||
paddingValues = innerPadding,
|
||||
screensViewModel = screensViewModel,
|
||||
bottomBarViewModel = bottomBarViewModel
|
||||
|
|
@ -104,21 +118,47 @@ fun BottomBarAnimated(
|
|||
|
||||
@Composable
|
||||
fun Screens_NavGraph(
|
||||
navController: NavHostController,
|
||||
paddingValues: PaddingValues,
|
||||
screensViewModel: ScreensViewModel,
|
||||
bottomBarViewModel: BottomBarViewModel,
|
||||
) {
|
||||
//nav_wheel_selecting tab
|
||||
val mainScreens = remember { listOf(Screen.Message, Screen.Server, Screen.MarketPlace, Screen.Setting) }
|
||||
val pagerState = rememberPagerState(pageCount = { mainScreens.size })
|
||||
val selectedScreen by screensViewModel.selected.collectAsState()
|
||||
|
||||
// 1. Sync ViewModel selection to Pager (Wheel -> Pager)
|
||||
LaunchedEffect(selectedScreen) {
|
||||
val targetPage = mainScreens.indexOf(selectedScreen)
|
||||
if (targetPage != -1 && pagerState.currentPage != targetPage) {
|
||||
pagerState.animateScrollToPage(targetPage)
|
||||
}
|
||||
}
|
||||
|
||||
when (selectedScreen) {
|
||||
Screen.Message -> Tg_Message()
|
||||
Screen.Server -> Tg_Server(viewModel = viewModel())
|
||||
Screen.MarketPlace -> Tg_MarketPlace()
|
||||
Screen.Setting -> Tg_Setting(
|
||||
bottomBarViewModel = bottomBarViewModel
|
||||
)
|
||||
// 2. Sync Pager swipe to ViewModel (Pager -> Wheel)
|
||||
LaunchedEffect(pagerState.currentPage) {
|
||||
if (mainScreens[pagerState.currentPage] != screensViewModel.selected.value) {
|
||||
screensViewModel.select(mainScreens[pagerState.currentPage])
|
||||
}
|
||||
}
|
||||
|
||||
HorizontalPager(
|
||||
state = pagerState,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
beyondViewportPageCount = 1, // Pre-load adjacent screens for smoothness
|
||||
userScrollEnabled = true // Allow swiping between main tabs
|
||||
) { page ->
|
||||
Box(modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(paddingValues)
|
||||
) {
|
||||
when (mainScreens[page]) {
|
||||
Screen.Message -> Tg_Message()
|
||||
Screen.Server -> Tg_Server(viewModel = viewModel())
|
||||
Screen.MarketPlace -> Tg_MarketPlace()
|
||||
Screen.Setting -> Tg_Setting(bottomBarViewModel = bottomBarViewModel)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ data class WheelItemData(
|
|||
|
||||
@Composable
|
||||
fun nav_Wheel_display_block(
|
||||
navController: NavHostController,
|
||||
screensViewModel: ScreensViewModel
|
||||
) {
|
||||
var isPressed by remember { mutableStateOf(false) }
|
||||
|
|
@ -97,7 +98,13 @@ fun nav_Wheel_display_block(
|
|||
) {
|
||||
HorizontalWheelPicker(
|
||||
items = items,
|
||||
onValueChange = { item -> screensViewModel.select(item.screen) },
|
||||
onValueChange = { item ->
|
||||
if (screensViewModel.selected.value != item.screen) {
|
||||
screensViewModel.select(item.screen)
|
||||
// Note: Navigation is now handled by the Pager in MainScreen_tab
|
||||
// which observes the screensViewModel.selected state.
|
||||
}
|
||||
},
|
||||
onInteractionChanged = { isPressed = it }
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ import androidx.compose.ui.Alignment
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.login_v3.auth.login.LoginScreen
|
||||
import com.example.login_v3.auth.Login_or_Reg_page
|
||||
import com.example.login_v3.auth.SwitchAccount.AccountSwitchScreen
|
||||
|
|
@ -26,6 +28,7 @@ fun AppNavGraph(
|
|||
appViewModel: AppViewModel = hiltViewModel()
|
||||
) {
|
||||
val currentScreen by appViewModel.currentScreen.collectAsState()
|
||||
val navController = rememberNavController()
|
||||
|
||||
when (currentScreen) {
|
||||
|
||||
|
|
@ -79,7 +82,7 @@ fun AppNavGraph(
|
|||
onLogout = { appViewModel.onLogout() }
|
||||
)
|
||||
|
||||
AppScreen.ScreensTab -> MainScreen_tab()
|
||||
AppScreen.ScreensTab -> MainScreen_tab(navController = navController)
|
||||
|
||||
AppScreen.AccountSwitch -> {
|
||||
BackHandler {
|
||||
|
|
|
|||
Loading…
Reference in a new issue