Skip to content

Commit 5fb9ab1

Browse files
committed
library: Optimize Utils related performance
1 parent bf69e23 commit 5fb9ab1

File tree

15 files changed

+262
-189
lines changed

15 files changed

+262
-189
lines changed

example/src/commonMain/kotlin/MainPage.kt

Lines changed: 99 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.padding
1919
import androidx.compose.foundation.layout.windowInsetsPadding
2020
import androidx.compose.foundation.lazy.LazyColumn
2121
import androidx.compose.runtime.Composable
22+
import androidx.compose.runtime.derivedStateOf
2223
import androidx.compose.runtime.getValue
2324
import androidx.compose.runtime.mutableStateOf
2425
import androidx.compose.runtime.remember
@@ -38,6 +39,47 @@ import top.yukonga.miuix.kmp.basic.ScrollBehavior
3839
import top.yukonga.miuix.kmp.basic.SearchBar
3940
import top.yukonga.miuix.kmp.basic.SmallTitle
4041
import top.yukonga.miuix.kmp.basic.Text
42+
import top.yukonga.miuix.kmp.icon.MiuixIcons
43+
import top.yukonga.miuix.kmp.icon.icons.useful.AddSecret
44+
import top.yukonga.miuix.kmp.icon.icons.useful.Back
45+
import top.yukonga.miuix.kmp.icon.icons.useful.Blocklist
46+
import top.yukonga.miuix.kmp.icon.icons.useful.Cancel
47+
import top.yukonga.miuix.kmp.icon.icons.useful.Confirm
48+
import top.yukonga.miuix.kmp.icon.icons.useful.Copy
49+
import top.yukonga.miuix.kmp.icon.icons.useful.Cut
50+
import top.yukonga.miuix.kmp.icon.icons.useful.Delete
51+
import top.yukonga.miuix.kmp.icon.icons.useful.Edit
52+
import top.yukonga.miuix.kmp.icon.icons.useful.ImmersionMore
53+
import top.yukonga.miuix.kmp.icon.icons.useful.Info
54+
import top.yukonga.miuix.kmp.icon.icons.useful.Like
55+
import top.yukonga.miuix.kmp.icon.icons.useful.More
56+
import top.yukonga.miuix.kmp.icon.icons.useful.Move
57+
import top.yukonga.miuix.kmp.icon.icons.useful.NavigatorSwitch
58+
import top.yukonga.miuix.kmp.icon.icons.useful.New
59+
import top.yukonga.miuix.kmp.icon.icons.useful.Order
60+
import top.yukonga.miuix.kmp.icon.icons.useful.Paste
61+
import top.yukonga.miuix.kmp.icon.icons.useful.Pause
62+
import top.yukonga.miuix.kmp.icon.icons.useful.Personal
63+
import top.yukonga.miuix.kmp.icon.icons.useful.Play
64+
import top.yukonga.miuix.kmp.icon.icons.useful.Reboot
65+
import top.yukonga.miuix.kmp.icon.icons.useful.Redo
66+
import top.yukonga.miuix.kmp.icon.icons.useful.Refresh
67+
import top.yukonga.miuix.kmp.icon.icons.useful.Remove
68+
import top.yukonga.miuix.kmp.icon.icons.useful.RemoveBlocklist
69+
import top.yukonga.miuix.kmp.icon.icons.useful.RemoveSecret
70+
import top.yukonga.miuix.kmp.icon.icons.useful.Rename
71+
import top.yukonga.miuix.kmp.icon.icons.useful.Restore
72+
import top.yukonga.miuix.kmp.icon.icons.useful.Save
73+
import top.yukonga.miuix.kmp.icon.icons.useful.Scan
74+
import top.yukonga.miuix.kmp.icon.icons.useful.Search
75+
import top.yukonga.miuix.kmp.icon.icons.useful.SelectAll
76+
import top.yukonga.miuix.kmp.icon.icons.useful.Settings
77+
import top.yukonga.miuix.kmp.icon.icons.useful.Share
78+
import top.yukonga.miuix.kmp.icon.icons.useful.Stick
79+
import top.yukonga.miuix.kmp.icon.icons.useful.Undo
80+
import top.yukonga.miuix.kmp.icon.icons.useful.Unlike
81+
import top.yukonga.miuix.kmp.icon.icons.useful.Unstick
82+
import top.yukonga.miuix.kmp.icon.icons.useful.Update
4183
import top.yukonga.miuix.kmp.theme.MiuixTheme
4284
import top.yukonga.miuix.kmp.utils.getWindowSize
4385
import top.yukonga.miuix.kmp.utils.overScrollVertical
@@ -73,6 +115,8 @@ fun MainPage(
73115
val superSwitchState = remember { mutableStateOf(false) }
74116
val superSwitchAnimState = remember { mutableStateOf(false) }
75117

118+
val notExpanded by remember { derivedStateOf { !expanded } }
119+
76120
val textComponent = @Composable {
77121
TextComponent(
78122
showDialog,
@@ -99,6 +143,52 @@ fun MainPage(
99143
)
100144
}
101145

146+
val miuixIcons = remember {
147+
listOf(
148+
MiuixIcons.Useful.AddSecret,
149+
MiuixIcons.Useful.Back,
150+
MiuixIcons.Useful.Blocklist,
151+
MiuixIcons.Useful.Cancel,
152+
MiuixIcons.Useful.Confirm,
153+
MiuixIcons.Useful.Copy,
154+
MiuixIcons.Useful.Cut,
155+
MiuixIcons.Useful.Delete,
156+
MiuixIcons.Useful.Edit,
157+
MiuixIcons.Useful.ImmersionMore,
158+
MiuixIcons.Useful.Info,
159+
MiuixIcons.Useful.Like,
160+
MiuixIcons.Useful.More,
161+
MiuixIcons.Useful.Move,
162+
MiuixIcons.Useful.NavigatorSwitch,
163+
MiuixIcons.Useful.New,
164+
MiuixIcons.Useful.Order,
165+
MiuixIcons.Useful.Paste,
166+
MiuixIcons.Useful.Pause,
167+
MiuixIcons.Useful.Personal,
168+
MiuixIcons.Useful.Play,
169+
MiuixIcons.Useful.Reboot,
170+
MiuixIcons.Useful.Redo,
171+
MiuixIcons.Useful.Refresh,
172+
MiuixIcons.Useful.Remove,
173+
MiuixIcons.Useful.RemoveBlocklist,
174+
MiuixIcons.Useful.RemoveSecret,
175+
MiuixIcons.Useful.Rename,
176+
MiuixIcons.Useful.Restore,
177+
MiuixIcons.Useful.Save,
178+
MiuixIcons.Useful.Scan,
179+
MiuixIcons.Useful.Search,
180+
MiuixIcons.Useful.SelectAll,
181+
MiuixIcons.Useful.Settings,
182+
MiuixIcons.Useful.Share,
183+
MiuixIcons.Useful.Stick,
184+
MiuixIcons.Useful.Undo,
185+
MiuixIcons.Useful.Unlike,
186+
MiuixIcons.Useful.Unstick,
187+
MiuixIcons.Useful.Update
188+
)
189+
}
190+
191+
102192
BoxWithConstraints(
103193
modifier = Modifier.fillMaxSize()
104194
) {
@@ -115,7 +205,7 @@ fun MainPage(
115205
contentPadding = PaddingValues(top = padding.calculateTopPadding()),
116206
overscrollEffect = null,
117207
) {
118-
item {
208+
item(key = "searchbar") {
119209
SmallTitle(text = "SearchBar")
120210
SearchBar(
121211
inputField = {
@@ -161,11 +251,11 @@ fun MainPage(
161251
}
162252
}
163253
}
164-
if (!expanded) {
165-
item {
254+
if (notExpanded) {
255+
item(key = "textComponent") {
166256
textComponent()
167257
}
168-
otherComponent(focusManager, padding)
258+
otherComponent(miuixIcons, focusManager, padding)
169259
}
170260
}
171261
} else {
@@ -181,7 +271,7 @@ fun MainPage(
181271
.weight(0.5f),
182272
contentPadding = PaddingValues(top = padding.calculateTopPadding())
183273
) {
184-
item {
274+
item(key = "searchbar-wide") {
185275
SmallTitle(text = "SearchBar")
186276
SearchBar(
187277
inputField = {
@@ -229,9 +319,9 @@ fun MainPage(
229319
}
230320
}
231321
}
232-
if (!expanded) {
233-
otherComponent(focusManager, padding)
234-
item {
322+
if (notExpanded) {
323+
otherComponent(miuixIcons, focusManager, padding)
324+
item(key = "spacer-wide") {
235325
Spacer(modifier = Modifier.height(6.dp))
236326
}
237327
}
@@ -244,7 +334,7 @@ fun MainPage(
244334
.weight(0.5f),
245335
contentPadding = PaddingValues(top = padding.calculateTopPadding())
246336
) {
247-
item {
337+
item(key = "textComponent-wide") {
248338
textComponent()
249339
Spacer(modifier = Modifier.height(padding.calculateBottomPadding()))
250340
}

example/src/commonMain/kotlin/SecondPage.kt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.LazyColumn
99
import androidx.compose.runtime.Composable
1010
import androidx.compose.runtime.LaunchedEffect
1111
import androidx.compose.runtime.getValue
12+
import androidx.compose.runtime.key
1213
import androidx.compose.runtime.mutableStateOf
1314
import androidx.compose.runtime.remember
1415
import androidx.compose.runtime.saveable.rememberSaveable
@@ -34,7 +35,7 @@ fun SecondPage(
3435
var isRefreshing by rememberSaveable { mutableStateOf(false) }
3536
val pullToRefreshState = rememberPullToRefreshState()
3637

37-
val dropdownOptions = listOf("Option 1", "Option 2", "Option 3", "Option 4")
38+
val dropdownOptions = remember { listOf("Option 1", "Option 2", "Option 3", "Option 4") }
3839
var dropdownSelectedOption by remember { mutableStateOf(0) }
3940
var ii by remember { mutableStateOf(6) }
4041

@@ -68,14 +69,16 @@ fun SecondPage(
6869
modifier = Modifier.padding(horizontal = 12.dp).padding(bottom = 12.dp),
6970
) {
7071
for (i in 0 until ii) {
71-
SuperDropdown(
72-
title = "Dropdown ${i + 1}",
73-
items = dropdownOptions,
74-
selectedIndex = dropdownSelectedOption,
75-
onSelectedIndexChange = { newOption ->
76-
dropdownSelectedOption = newOption
77-
}
78-
)
72+
key(i) {
73+
SuperDropdown(
74+
title = "Dropdown ${i + 1}",
75+
items = dropdownOptions,
76+
selectedIndex = dropdownSelectedOption,
77+
onSelectedIndexChange = { newOption ->
78+
dropdownSelectedOption = newOption
79+
}
80+
)
81+
}
7982
}
8083
}
8184
Spacer(modifier = Modifier.height(padding.calculateBottomPadding()))

example/src/commonMain/kotlin/ThirdPage.kt

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ fun ThirdPage(
6363
colorMode: MutableState<Int>
6464
) {
6565
val showDialog = remember { mutableStateOf(false) }
66+
val floatingNavigationBarModeOptions = remember {
67+
listOf("IconOnly", "IconAndText", "TextOnly")
68+
}
69+
val floatingNavigationBarPositionOptions = remember {
70+
listOf("Center", "Start", "End")
71+
}
72+
val floatingToolbarPositionOptions = remember {
73+
listOf("TopStart", "CenterStart", "BottomStart", "TopEnd", "CenterEnd", "BottomEnd", "TopCenter", "BottomCenter")
74+
}
75+
val floatingToolbarOrientationOptions = remember { listOf("Horizontal", "Vertical") }
76+
val fabPositionOptions = remember { listOf("Start", "Center", "End", "EndOverlay") }
77+
val colorModeOptions = remember { listOf("System", "Light", "Dark") }
6678
LazyColumn(
6779
modifier = Modifier
6880
.then(
@@ -108,13 +120,13 @@ fun ThirdPage(
108120
Column {
109121
SuperDropdown(
110122
title = "FloatingNavigationBar Mode",
111-
items = listOf("IconOnly", "IconAndText", "TextOnly"),
123+
items = floatingNavigationBarModeOptions,
112124
selectedIndex = floatingNavigationBarMode,
113125
onSelectedIndexChange = onFloatingNavigationBarModeChange
114126
)
115127
SuperDropdown(
116128
title = "FloatingNavigationBar Position",
117-
items = listOf("Center", "Start", "End"),
129+
items = floatingNavigationBarPositionOptions,
118130
selectedIndex = floatingNavigationBarPosition,
119131
onSelectedIndexChange = onFloatingNavigationBarPositionChange
120132
)
@@ -133,22 +145,13 @@ fun ThirdPage(
133145
Column {
134146
SuperDropdown(
135147
title = "FloatingToolbar Position",
136-
items = listOf(
137-
"TopStart",
138-
"CenterStart",
139-
"BottomStart",
140-
"TopEnd",
141-
"CenterEnd",
142-
"BottomEnd",
143-
"TopCenter",
144-
"BottomCenter"
145-
),
148+
items = floatingToolbarPositionOptions,
146149
selectedIndex = floatingToolbarPosition,
147150
onSelectedIndexChange = onFloatingToolbarPositionChange
148151
)
149152
SuperDropdown(
150153
title = "FloatingToolbar Orientation",
151-
items = listOf("Horizontal", "Vertical"),
154+
items = floatingToolbarOrientationOptions,
152155
selectedIndex = floatingToolbarOrientation,
153156
onSelectedIndexChange = onFloatingToolbarOrientationChange
154157
)
@@ -164,12 +167,7 @@ fun ThirdPage(
164167
) {
165168
SuperDropdown(
166169
title = "FloatingActionButton Position",
167-
items = listOf(
168-
"Start",
169-
"Center",
170-
"End",
171-
"EndOverlay",
172-
),
170+
items = fabPositionOptions,
173171
selectedIndex = fabPosition,
174172
onSelectedIndexChange = { fabPosition ->
175173
onFabPositionChange(fabPosition)
@@ -188,7 +186,7 @@ fun ThirdPage(
188186
)
189187
SuperDropdown(
190188
title = "Color Mode",
191-
items = listOf("System", "Light", "Dark"),
189+
items = colorModeOptions,
192190
selectedIndex = colorMode.value,
193191
onSelectedIndexChange = { colorMode.value = it }
194192
)

example/src/commonMain/kotlin/UITest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ fun UITest(
220220
exit = fadeOut()
221221
) {
222222
FloatingToolbar(
223+
color = MiuixTheme.colorScheme.primaryVariant,
223224
cornerRadius = 20.dp
224225
) {
225226
AnimatedContent(

0 commit comments

Comments
 (0)