@@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.imePadding
1818import androidx.compose.foundation.layout.navigationBars
1919import androidx.compose.foundation.layout.only
2020import androidx.compose.foundation.layout.padding
21- import androidx.compose.foundation.layout.size
2221import androidx.compose.foundation.layout.statusBarsPadding
2322import androidx.compose.foundation.layout.windowInsetsPadding
2423import androidx.compose.foundation.pager.HorizontalPager
@@ -34,6 +33,7 @@ import androidx.compose.runtime.rememberCoroutineScope
3433import androidx.compose.runtime.setValue
3534import androidx.compose.ui.Modifier
3635import androidx.compose.ui.graphics.Color
36+ import androidx.compose.ui.graphics.vector.ImageVector
3737import androidx.compose.ui.hapticfeedback.HapticFeedbackType
3838import androidx.compose.ui.platform.LocalHapticFeedback
3939import androidx.compose.ui.platform.LocalUriHandler
@@ -44,14 +44,16 @@ import dev.chrisbanes.haze.HazeTint
4444import dev.chrisbanes.haze.hazeEffect
4545import dev.chrisbanes.haze.hazeSource
4646import kotlinx.coroutines.launch
47+ import top.yukonga.miuix.kmp.basic.FabPosition
4748import top.yukonga.miuix.kmp.basic.FloatingActionButton
4849import top.yukonga.miuix.kmp.basic.FloatingToolbar
50+ import top.yukonga.miuix.kmp.basic.FloatingToolbarItem
51+ import top.yukonga.miuix.kmp.basic.FloatingToolbarOrientation
4952import top.yukonga.miuix.kmp.basic.Icon
5053import top.yukonga.miuix.kmp.basic.IconButton
5154import top.yukonga.miuix.kmp.basic.ListPopup
5255import top.yukonga.miuix.kmp.basic.ListPopupColumn
5356import top.yukonga.miuix.kmp.basic.ListPopupDefaults
54- import top.yukonga.miuix.kmp.basic.FabPosition
5557import top.yukonga.miuix.kmp.basic.MiuixScrollBehavior
5658import top.yukonga.miuix.kmp.basic.NavigationBar
5759import top.yukonga.miuix.kmp.basic.NavigationItem
@@ -63,7 +65,6 @@ import top.yukonga.miuix.kmp.basic.ToolbarPosition
6365import top.yukonga.miuix.kmp.basic.TopAppBar
6466import top.yukonga.miuix.kmp.extra.DropdownImpl
6567import top.yukonga.miuix.kmp.icon.MiuixIcons
66- import top.yukonga.miuix.kmp.icon.icons.basic.Check
6768import top.yukonga.miuix.kmp.icon.icons.other.GitHub
6869import top.yukonga.miuix.kmp.icon.icons.useful.ImmersionMore
6970import top.yukonga.miuix.kmp.icon.icons.useful.NavigatorSwitch
@@ -81,6 +82,7 @@ data class UIState(
8182 val floatingToolbarPosition : Int = 7 ,
8283 val showFloatingActionButton : Boolean = true ,
8384 val floatingActionButtonPosition : Int = 2 ,
85+ val floatingToolbarOrientation : Int = 0 ,
8486 val enablePageUserScroll : Boolean = false ,
8587 val isTopPopupExpanded : Boolean = false
8688)
@@ -95,12 +97,23 @@ fun UITest(
9597 val selectedPage by remember { derivedStateOf { pagerState.currentPage } }
9698 val currentScrollBehavior = topAppBarScrollBehaviorList[selectedPage]
9799
98- val items = remember {
99- listOf (
100- NavigationItem (" HomePage" , MiuixIcons .Useful .NavigatorSwitch ),
101- NavigationItem (" DropDown" , MiuixIcons .Useful .Order ),
102- NavigationItem (" Settings" , MiuixIcons .Useful .Settings )
103- )
100+
101+ @Composable
102+ fun rememberCommonItems (): List <Pair <String , ImageVector >> {
103+ return remember {
104+ listOf (
105+ " HomePage" to MiuixIcons .Useful .NavigatorSwitch ,
106+ " DropDown" to MiuixIcons .Useful .Order ,
107+ " Settings" to MiuixIcons .Useful .Settings
108+ )
109+ }
110+ }
111+
112+ val navigationItem = rememberCommonItems().map { (label, icon) ->
113+ NavigationItem (label, icon)
114+ }
115+ val floatingToolbarItem = rememberCommonItems().map { (label, icon) ->
116+ FloatingToolbarItem (label, icon)
104117 }
105118
106119 var uiState by remember { mutableStateOf(UIState ()) }
@@ -127,7 +140,7 @@ fun UITest(
127140 hazeState = hazeState,
128141 hazeStyle = hazeStyle,
129142 currentScrollBehavior = currentScrollBehavior,
130- items = items ,
143+ items = navigationItem ,
131144 isTopPopupExpanded = uiState.isTopPopupExpanded,
132145 showTopPopup = showTopPopup,
133146 onPopupExpandedChange = { uiState = uiState.copy(isTopPopupExpanded = it) },
@@ -152,10 +165,10 @@ fun UITest(
152165 blurRadius = 25 .dp
153166 noiseFactor = 0f
154167 },
155- items = items ,
168+ items = navigationItem ,
156169 selected = selectedPage,
157170 onClick = { index ->
158- if (index in 0 .. items .lastIndex) {
171+ if (index in 0 .. navigationItem .lastIndex) {
159172 coroutineScope.launch {
160173 pagerState.animateScrollToPage(index)
161174 }
@@ -184,6 +197,44 @@ fun UITest(
184197 1 -> FabPosition .Center
185198 2 -> FabPosition .End
186199 else -> FabPosition .EndOverlay
200+ },
201+ floatingToolbar = {
202+ AnimatedVisibility (
203+ visible = uiState.useFloatingToolbar,
204+ enter = fadeIn() + slideInVertically(initialOffsetY = { it }) + expandVertically(),
205+ exit = fadeOut() + slideOutVertically(targetOffsetY = { it }) + shrinkVertically()
206+ ) {
207+ FloatingToolbar (
208+ items = floatingToolbarItem,
209+ selected = selectedPage,
210+ onClick = { index ->
211+ coroutineScope.launch {
212+ pagerState.animateScrollToPage(index)
213+ }
214+ },
215+ modifier = Modifier
216+ .hazeEffect(hazeState) {
217+ style = hazeStyle
218+ blurRadius = 25 .dp
219+ noiseFactor = 0f
220+ },
221+ color = Color .Transparent ,
222+ targetState = when (uiState.floatingToolbarOrientation) {
223+ 0 -> FloatingToolbarOrientation .Horizontal
224+ else -> FloatingToolbarOrientation .Vertical
225+ },
226+ )
227+ }
228+ },
229+ floatingToolbarPosition = when (uiState.floatingToolbarPosition) {
230+ 0 -> ToolbarPosition .TopStart
231+ 1 -> ToolbarPosition .CenterStart
232+ 2 -> ToolbarPosition .BottomStart
233+ 3 -> ToolbarPosition .TopEnd
234+ 4 -> ToolbarPosition .CenterEnd
235+ 5 -> ToolbarPosition .BottomEnd
236+ 6 -> ToolbarPosition .TopCenter
237+ else -> ToolbarPosition .BottomCenter
187238 }
188239 ) { padding ->
189240 AppHorizontalPager (
@@ -200,55 +251,6 @@ fun UITest(
200251 colorMode = colorMode,
201252 )
202253 }
203-
204- AnimatedVisibility (
205- visible = uiState.useFloatingToolbar,
206- enter = fadeIn() + slideInVertically(initialOffsetY = { it }) + expandVertically(),
207- exit = fadeOut() + slideOutVertically(targetOffsetY = { it }) + shrinkVertically()
208- ) {
209- FloatingToolbar (
210- position = when (uiState.floatingToolbarPosition) {
211- 0 -> ToolbarPosition .LeftTop
212- 1 -> ToolbarPosition .LeftCenter
213- 2 -> ToolbarPosition .LeftBottom
214- 3 -> ToolbarPosition .RightTop
215- 4 -> ToolbarPosition .RightCenter
216- 5 -> ToolbarPosition .RightBottom
217- 6 -> ToolbarPosition .BottomLeft
218- 7 -> ToolbarPosition .BottomCenter
219- 8 -> ToolbarPosition .BottomRight
220- else -> ToolbarPosition .BottomCenter
221- },
222- modifier = Modifier .hazeEffect(hazeState) {
223- style = hazeStyle
224- blurRadius = 25 .dp
225- noiseFactor = 0f
226- },
227- color = MiuixTheme .colorScheme.background.copy(0.67f )
228- ) {
229- listOf (
230- MiuixIcons .Useful .NavigatorSwitch to 0 ,
231- MiuixIcons .Useful .Order to 1 ,
232- MiuixIcons .Useful .Settings to 2
233- ).forEach { (icon, pageIndex) ->
234- IconButton (
235- modifier = Modifier .size(48 .dp),
236- onClick = {
237- coroutineScope.launch {
238- pagerState.animateScrollToPage(pageIndex)
239- }
240- }
241- ) {
242- Icon (
243- icon,
244- contentDescription = null ,
245- tint = if (selectedPage == pageIndex) MiuixTheme .colorScheme.onSurfaceContainer else MiuixTheme .colorScheme.onSurfaceContainerVariant
246- )
247- }
248- }
249- }
250- }
251-
252254 AnimatedVisibility (
253255 visible = uiState.showFPSMonitor,
254256 enter = fadeIn() + expandHorizontally(),
@@ -419,6 +421,8 @@ fun AppHorizontalPager(
419421 onUseFloatingToolbarChange = { onUiStateChange(uiState.copy(useFloatingToolbar = it)) },
420422 floatingToolbarPosition = uiState.floatingToolbarPosition,
421423 onFloatingToolbarPositionChange = { onUiStateChange(uiState.copy(floatingToolbarPosition = it)) },
424+ floatingToolbarOrientation = uiState.floatingToolbarOrientation,
425+ onFloatingToolbarOrientationChange = { onUiStateChange(uiState.copy(floatingToolbarOrientation = it)) },
422426 showFloatingActionButton = uiState.showFloatingActionButton,
423427 onShowFloatingActionButtonChange = { onUiStateChange(uiState.copy(showFloatingActionButton = it)) },
424428 fabPosition = uiState.floatingActionButtonPosition,
0 commit comments