Skip to content

Commit 317a32c

Browse files
YuKongAsd086
andcommitted
library: Add PullToRefresh component
* Useful for touch screen devices, but not for keyboard and mouse devices. * This component example is used in the Dropdown page Co-Authored-By: Mocha <[email protected]>
1 parent e6b9b47 commit 317a32c

File tree

4 files changed

+732
-17
lines changed

4 files changed

+732
-17
lines changed

composeApp/src/commonMain/kotlin/SecondPage.kt

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,73 @@
11
import androidx.compose.foundation.layout.PaddingValues
2+
import androidx.compose.foundation.layout.Spacer
3+
import androidx.compose.foundation.layout.fillMaxSize
4+
import androidx.compose.foundation.layout.height
25
import androidx.compose.foundation.layout.padding
36
import androidx.compose.runtime.Composable
7+
import androidx.compose.runtime.LaunchedEffect
8+
import androidx.compose.runtime.getValue
49
import androidx.compose.runtime.mutableStateOf
510
import androidx.compose.runtime.remember
11+
import androidx.compose.runtime.setValue
612
import androidx.compose.ui.Modifier
713
import androidx.compose.ui.unit.dp
14+
import kotlinx.coroutines.delay
815
import top.yukonga.miuix.kmp.basic.Card
916
import top.yukonga.miuix.kmp.basic.LazyColumn
17+
import top.yukonga.miuix.kmp.basic.PullToRefresh
1018
import top.yukonga.miuix.kmp.basic.ScrollBehavior
19+
import top.yukonga.miuix.kmp.basic.rememberPullToRefreshState
1120
import top.yukonga.miuix.kmp.extra.SuperDropdown
1221

1322
@Composable
1423
fun SecondPage(
1524
topAppBarScrollBehavior: ScrollBehavior,
1625
padding: PaddingValues
1726
) {
27+
val pullToRefreshState = rememberPullToRefreshState()
28+
var isRefreshing by remember { mutableStateOf(false) }
29+
1830
val dropdownOptions = listOf("Option 1", "Option 2", "Option 3", "Option 4")
1931
val dropdownSelectedOption = remember { mutableStateOf(0) }
32+
var ii = remember { mutableStateOf(10) }
33+
34+
LaunchedEffect(pullToRefreshState.isRefreshing) {
35+
if (pullToRefreshState.isRefreshing) {
36+
isRefreshing = true
37+
delay(100)
38+
pullToRefreshState.completeRefreshing {
39+
isRefreshing = false
40+
}
41+
}
42+
}
2043

21-
LazyColumn(
22-
contentPadding = PaddingValues(top = padding.calculateTopPadding()),
23-
topAppBarScrollBehavior = topAppBarScrollBehavior
44+
PullToRefresh(
45+
modifier = Modifier.padding(
46+
top = padding.calculateTopPadding()
47+
),
48+
pullToRefreshState = pullToRefreshState,
49+
onRefresh = { ii.value++ }
2450
) {
25-
item {
26-
Card(
27-
modifier = Modifier
28-
.padding(horizontal = 12.dp)
29-
.padding(top = 12.dp, bottom = 12.dp + padding.calculateBottomPadding())
30-
) {
31-
for (i in 0 until 50) {
32-
SuperDropdown(
33-
title = "Dropdown",
34-
items = dropdownOptions,
35-
selectedIndex = dropdownSelectedOption.value,
36-
onSelectedIndexChange = { newOption -> dropdownSelectedOption.value = newOption }
37-
)
51+
LazyColumn(
52+
modifier = Modifier
53+
.fillMaxSize(),
54+
topAppBarScrollBehavior = topAppBarScrollBehavior,
55+
) {
56+
item {
57+
Card(
58+
modifier = Modifier
59+
.padding(12.dp)
60+
) {
61+
for (i in 0 until ii.value) {
62+
SuperDropdown(
63+
title = "Dropdown ${i + 1}",
64+
items = dropdownOptions,
65+
selectedIndex = dropdownSelectedOption.value,
66+
onSelectedIndexChange = { newOption -> dropdownSelectedOption.value = newOption }
67+
)
68+
}
3869
}
70+
Spacer(modifier = Modifier.height(padding.calculateBottomPadding()))
3971
}
4072
}
4173
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ android-minSdk = "26"
33
android-compileSdk = "35"
44
android-targetSdk = "35"
55

6-
androidGradlePlugin = "8.8.0"
6+
androidGradlePlugin = "8.8.1"
77
androidx-activity-compose = "1.10.0"
88
androidx-window = "1.3.0"
99
androidx-graphics-shapes = "1.0.0-alpha03"

miuix/src/commonMain/kotlin/top/yukonga/miuix/kmp/basic/LazyColumn.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package top.yukonga.miuix.kmp.basic
22

33
import androidx.compose.foundation.gestures.ScrollableDefaults
4+
import androidx.compose.foundation.layout.Arrangement
45
import androidx.compose.foundation.layout.PaddingValues
56
import androidx.compose.foundation.lazy.LazyColumn
67
import androidx.compose.foundation.lazy.LazyListScope
78
import androidx.compose.foundation.lazy.LazyListState
89
import androidx.compose.foundation.lazy.rememberLazyListState
910
import androidx.compose.runtime.Composable
1011
import androidx.compose.runtime.remember
12+
import androidx.compose.ui.Alignment
1113
import androidx.compose.ui.Modifier
1214
import androidx.compose.ui.input.nestedscroll.nestedScroll
1315
import androidx.compose.ui.unit.dp
@@ -32,6 +34,10 @@ fun LazyColumn(
3234
modifier: Modifier = Modifier,
3335
state: LazyListState = rememberLazyListState(),
3436
contentPadding: PaddingValues = PaddingValues(0.dp),
37+
reverseLayout: Boolean = false,
38+
verticalArrangement: Arrangement.Vertical =
39+
if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,
40+
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
3541
userScrollEnabled: Boolean = true,
3642
isEnabledOverScroll: () -> Boolean = { platform() == Platform.Android },
3743
topAppBarScrollBehavior: ScrollBehavior? = null,
@@ -60,6 +66,9 @@ fun LazyColumn(
6066
modifier = finalModifier,
6167
state = state,
6268
contentPadding = contentPadding,
69+
reverseLayout = reverseLayout,
70+
verticalArrangement = verticalArrangement,
71+
horizontalAlignment = horizontalAlignment,
6372
flingBehavior = flingBehavior,
6473
userScrollEnabled = userScrollEnabled,
6574
content = content

0 commit comments

Comments
 (0)