@@ -11,13 +11,13 @@ import androidx.compose.foundation.layout.captionBarPadding
1111import androidx.compose.foundation.layout.fillMaxSize
1212import androidx.compose.foundation.layout.imePadding
1313import androidx.compose.foundation.layout.padding
14+ import androidx.compose.foundation.layout.size
1415import androidx.compose.foundation.layout.statusBarsPadding
16+ import androidx.compose.foundation.lazy.LazyColumn
1517import androidx.compose.foundation.pager.PagerState
1618import androidx.compose.foundation.pager.rememberPagerState
1719import androidx.compose.material.icons.Icons
18- import androidx.compose.material.icons.rounded.Favorite
1920import androidx.compose.material.icons.rounded.Home
20- import androidx.compose.material.icons.rounded.Menu
2121import androidx.compose.material.icons.rounded.Settings
2222import androidx.compose.runtime.Composable
2323import androidx.compose.runtime.LaunchedEffect
@@ -40,16 +40,24 @@ import top.yukonga.miuix.kmp.basic.FloatingActionButton
4040import top.yukonga.miuix.kmp.basic.HorizontalPager
4141import top.yukonga.miuix.kmp.basic.Icon
4242import top.yukonga.miuix.kmp.basic.IconButton
43+ import top.yukonga.miuix.kmp.basic.ListPopup
44+ import top.yukonga.miuix.kmp.basic.ListPopupDefaults
4345import top.yukonga.miuix.kmp.basic.MiuixScrollBehavior
4446import top.yukonga.miuix.kmp.basic.NavigationBar
4547import top.yukonga.miuix.kmp.basic.NavigationItem
48+ import top.yukonga.miuix.kmp.basic.PopupPositionProvider
4649import top.yukonga.miuix.kmp.basic.Scaffold
4750import top.yukonga.miuix.kmp.basic.ScrollBehavior
4851import top.yukonga.miuix.kmp.basic.SmallTopAppBar
4952import top.yukonga.miuix.kmp.basic.TopAppBar
5053import top.yukonga.miuix.kmp.basic.rememberTopAppBarState
54+ import top.yukonga.miuix.kmp.extra.DropdownImpl
5155import top.yukonga.miuix.kmp.icon.MiuixIcons
5256import top.yukonga.miuix.kmp.icon.icons.GitHub
57+ import top.yukonga.miuix.kmp.icon.icons.ImmersionMore
58+ import top.yukonga.miuix.kmp.icon.icons.Info
59+ import top.yukonga.miuix.kmp.icon.icons.More
60+ import top.yukonga.miuix.kmp.utils.MiuixPopupUtil.Companion.dismissPopup
5361import utils.FPSMonitor
5462
5563@OptIn(FlowPreview ::class )
@@ -77,8 +85,9 @@ fun UITest(
7785
7886 val items = listOf (
7987 NavigationItem (" HomePage" , Icons .Rounded .Home ),
80- NavigationItem (" DropDown" , Icons .Rounded .Favorite ),
81- NavigationItem (" Settings" , Icons .Rounded .Settings )
88+ NavigationItem (" DropDown" , MiuixIcons .Info ),
89+ NavigationItem (" Settings" , Icons .Rounded .Settings ),
90+ NavigationItem (" More" , MiuixIcons .More )
8291 )
8392
8493 LaunchedEffect (pagerState) {
@@ -93,6 +102,11 @@ fun UITest(
93102 val showFloatingActionButton = remember { mutableStateOf(true ) }
94103 val enablePageUserScroll = remember { mutableStateOf(false ) }
95104
105+ val isTopPopupExpanded = remember { mutableStateOf(false ) }
106+ val showTopPopup = remember { mutableStateOf(false ) }
107+ val isBottomPopupExpanded = remember { mutableStateOf(false ) }
108+ val showBottomPopup = remember { mutableStateOf(false ) }
109+
96110 val uriHandler = LocalUriHandler .current
97111
98112 Scaffold (
@@ -109,12 +123,41 @@ fun UITest(
109123 title = " Miuix" ,
110124 scrollBehavior = currentScrollBehavior,
111125 actions = {
126+ if (isTopPopupExpanded.value) {
127+ ListPopup (
128+ show = showTopPopup,
129+ popupPositionProvider = ListPopupDefaults .ContextMenuPositionProvider ,
130+ alignment = PopupPositionProvider .Align .TopRight ,
131+ onDismissRequest = {
132+ isTopPopupExpanded.value = false
133+ }
134+ ) {
135+ LazyColumn {
136+ items(items.size) { index ->
137+ DropdownImpl (
138+ text = items[index].label,
139+ optionSize = items.size,
140+ isSelected = false ,
141+ onSelectedIndexChange = {
142+ dismissPopup(showTopPopup)
143+ isTopPopupExpanded.value = false
144+ },
145+ textWidthDp = 100 .dp,
146+ index = index
147+ )
148+ }
149+ }
150+ }
151+ showTopPopup.value = true
152+ }
112153 IconButton (
113- modifier = Modifier .padding(end = 12 .dp),
114- onClick = { }
154+ modifier = Modifier .padding(end = 21 .dp).size(40 .dp),
155+ onClick = {
156+ isTopPopupExpanded.value = true
157+ }
115158 ) {
116159 Icon (
117- imageVector = Icons . Rounded . Menu ,
160+ imageVector = MiuixIcons . ImmersionMore ,
118161 contentDescription = " Menu"
119162 )
120163 }
@@ -125,12 +168,41 @@ fun UITest(
125168 title = " Miuix" ,
126169 scrollBehavior = currentScrollBehavior,
127170 actions = {
171+ if (isTopPopupExpanded.value) {
172+ ListPopup (
173+ show = showTopPopup,
174+ popupPositionProvider = ListPopupDefaults .ContextMenuPositionProvider ,
175+ alignment = PopupPositionProvider .Align .TopRight ,
176+ onDismissRequest = {
177+ isTopPopupExpanded.value = false
178+ }
179+ ) {
180+ LazyColumn {
181+ items(items.size) { index ->
182+ DropdownImpl (
183+ text = items[index].label,
184+ optionSize = items.size,
185+ isSelected = false ,
186+ onSelectedIndexChange = {
187+ dismissPopup(showTopPopup)
188+ isTopPopupExpanded.value = false
189+ },
190+ textWidthDp = 100 .dp,
191+ index = index
192+ )
193+ }
194+ }
195+ }
196+ showTopPopup.value = true
197+ }
128198 IconButton (
129- modifier = Modifier .padding(end = 12 .dp),
130- onClick = { }
199+ modifier = Modifier .padding(end = 21 .dp).size(40 .dp),
200+ onClick = {
201+ isTopPopupExpanded.value = true
202+ }
131203 ) {
132204 Icon (
133- imageVector = Icons . Rounded . Menu ,
205+ imageVector = MiuixIcons . ImmersionMore ,
134206 contentDescription = " Menu"
135207 )
136208 }
@@ -146,13 +218,44 @@ fun UITest(
146218 enter = fadeIn() + expandVertically(),
147219 exit = fadeOut() + shrinkVertically()
148220 ) {
221+ if (isBottomPopupExpanded.value) {
222+ ListPopup (
223+ show = showBottomPopup,
224+ popupPositionProvider = ListPopupDefaults .ContextMenuPositionProvider ,
225+ alignment = PopupPositionProvider .Align .BottomRight ,
226+ onDismissRequest = {
227+ isBottomPopupExpanded.value = false
228+ }
229+ ) {
230+ LazyColumn {
231+ items(items.size) { index ->
232+ DropdownImpl (
233+ text = items[index].label,
234+ optionSize = items.size,
235+ isSelected = false ,
236+ onSelectedIndexChange = {
237+ dismissPopup(showBottomPopup)
238+ isBottomPopupExpanded.value = false
239+ },
240+ textWidthDp = 100 .dp,
241+ index = index
242+ )
243+ }
244+ }
245+ }
246+ showBottomPopup.value = true
247+ }
149248 NavigationBar (
150249 items = items,
151250 selected = targetPage,
152251 onClick = { index ->
153- targetPage = index
154- coroutineScope.launch {
155- pagerState.animateScrollToPage(index)
252+ if (index in 0 .. 2 ) {
253+ targetPage = index
254+ coroutineScope.launch {
255+ pagerState.animateScrollToPage(index)
256+ }
257+ } else {
258+ isBottomPopupExpanded.value = true
156259 }
157260 }
158261 )
0 commit comments