dm-padding message-14

This commit is contained in:
eric 2026-07-09 16:21:00 +08:00
parent d682304a3c
commit d29eac88d4

View file

@ -37,6 +37,7 @@ import androidx.compose.ui.draw.blur
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -68,6 +69,7 @@ fun nav_Wheel_display_block(
screensViewModel: ScreensViewModel screensViewModel: ScreensViewModel
) { ) {
var isPressed by remember { mutableStateOf(false) } var isPressed by remember { mutableStateOf(false) }
val selectedScreen by screensViewModel.selected.collectAsState()
//position_animation //position_animation
val floatingOffset by animateDpAsState( val floatingOffset by animateDpAsState(
@ -81,12 +83,14 @@ fun nav_Wheel_display_block(
) )
//different tab //different tab
val items = listOf( val items = remember {
WheelItemData(Icons.Filled.Message, Screen.Message), listOf(
WheelItemData(Icons.Filled.Dns, Screen.Server), WheelItemData(Icons.Filled.Message, Screen.Message),
WheelItemData(Icons.Filled.Extension, Screen.MarketPlace), WheelItemData(Icons.Filled.Dns, Screen.Server),
WheelItemData(Icons.Filled.Settings, Screen.Setting) WheelItemData(Icons.Filled.Extension, Screen.MarketPlace),
) WheelItemData(Icons.Filled.Settings, Screen.Setting)
)
}
Column( Column(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
@ -102,11 +106,10 @@ fun nav_Wheel_display_block(
) { ) {
HorizontalWheelPicker( HorizontalWheelPicker(
items = items, items = items,
currentScreen = selectedScreen,
onValueChange = { item -> onValueChange = { item ->
if (screensViewModel.selected.value != item.screen) { if (screensViewModel.selected.value != item.screen) {
screensViewModel.select(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 } onInteractionChanged = { isPressed = it }
@ -123,12 +126,24 @@ fun nav_Wheel_display_block(
@Composable @Composable
fun HorizontalWheelPicker( fun HorizontalWheelPicker(
items: List<WheelItemData>, items: List<WheelItemData>,
currentScreen: Screen,
itemWidth: Dp = 80.dp, itemWidth: Dp = 80.dp,
onValueChange: (WheelItemData) -> Unit, onValueChange: (WheelItemData) -> Unit,
onInteractionChanged: (Boolean) -> Unit onInteractionChanged: (Boolean) -> Unit
) { ) {
val listState = rememberLazyListState() val listState = rememberLazyListState()
val flingBehavior = rememberSnapFlingBehavior(listState) val flingBehavior = rememberSnapFlingBehavior(listState)
val isInteracting by remember { derivedStateOf { listState.isScrollInProgress } }
// 🎯 核心修正:當螢幕被左右滑動時,同步讓 Wheel 捲動到對應位置
LaunchedEffect(currentScreen) {
if (!isInteracting) { // 只有在使用者沒在撥動 Wheel 時才自動捲動,避免互搶控制權
val targetIndex = items.indexOfFirst { it.screen == currentScreen }
if (targetIndex != -1) {
listState.animateScrollToItem(targetIndex)
}
}
}
// 計算動態 horizontal padding(假設 LazyRow 佔滿螢幕寬度) // 計算動態 horizontal padding(假設 LazyRow 佔滿螢幕寬度)
val screenWidthDp = androidx.compose.ui.platform.LocalConfiguration.current.screenWidthDp.dp val screenWidthDp = androidx.compose.ui.platform.LocalConfiguration.current.screenWidthDp.dp
@ -173,8 +188,6 @@ fun HorizontalWheelPicker(
} }
} }
val isInteracting by remember { derivedStateOf { listState.isScrollInProgress } }
// 🎯 性能優化:只有當「中心項」真正改變時,才觸發更新 // 🎯 性能優化:只有當「中心項」真正改變時,才觸發更新
LaunchedEffect(listState) { LaunchedEffect(listState) {
snapshotFlow { snapshotFlow {