Skip to content

Commit a5a323e

Browse files
committed
WiP 16
1 parent abe2c43 commit a5a323e

File tree

3 files changed

+186
-2
lines changed

3 files changed

+186
-2
lines changed

docs/.vitepress/config.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export default defineConfig({
134134
{ text: 'FloatingActionButton', link: '/components/floatingactionbutton' },
135135
{ text: 'Divider', link: '/components/divider' },
136136
{ text: 'PullToRefresh', link: '/components/pulltorefresh' },
137-
{ text: 'SearchBar', link: '/components/searchview' },
137+
{ text: 'SearchBar', link: '/components/searchbar' },
138138
{ text: 'ColorPicker', link: '/components/colorpicker' },
139139
]
140140
},

docs/components/pulltorefresh.md

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# PullToRefresh
2+
3+
`PullToRefresh` 是 Miuix 中的下拉刷新组件,可为列表和其他可滚动内容提供刷新功能。它提供了具有动画效果的交互式刷新指示器,适用于需要刷新数据的各种场景。
4+
5+
## 引入
6+
7+
```kotlin
8+
import top.yukonga.miuix.kmp.basic.PullToRefresh
9+
import top.yukonga.miuix.kmp.basic.rememberPullToRefreshState
10+
```
11+
12+
## 基本用法
13+
14+
PullToRefresh 组件可以包裹任何可滚动的内容:
15+
16+
```kotlin
17+
val pullToRefreshState = rememberPullToRefreshState()
18+
var items by remember { mutableStateOf(1) }
19+
val scope = rememberCoroutineScope()
20+
Surface{
21+
PullToRefresh(
22+
pullToRefreshState = pullToRefreshState,
23+
onRefresh = {
24+
scope.launch {
25+
// 确定刷新状态
26+
if (pullToRefreshState.isRefreshing) {
27+
delay(300) // 模拟刷新操作
28+
// 刷新完成
29+
pullToRefreshState.completeRefreshing {
30+
// 更新数据
31+
items++
32+
}
33+
}
34+
}
35+
}
36+
) {
37+
LazyColumn(
38+
modifier = Modifier.fillMaxSize()
39+
) {
40+
items(items) { index ->
41+
SuperArrow(
42+
title = "Item $index",
43+
modifier = Modifier.padding(horizontal = 16.dp),
44+
onClick = { /* 点击事件 */ }
45+
)
46+
}
47+
}
48+
}
49+
}
50+
```
51+
52+
## 组件状态
53+
54+
PullToRefresh 组件有以下几种状态:
55+
56+
1. `Idle`:初始状态,无交互
57+
2. `Pulling`:用户正在下拉但尚未达到刷新阈值
58+
3. `ThresholdReached`:下拉达到阈值,松开可以刷新
59+
4. `Refreshing`:正在刷新
60+
5. `RefreshComplete`:刷新完成,正在回到初始状态
61+
62+
```kotlin
63+
val pullToRefreshState = rememberPullToRefreshState()
64+
// 检查是否正在刷新
65+
if (pullToRefreshState.isRefreshing) {
66+
// 正在刷新时的逻辑
67+
delay(2000) // 模拟网络请求
68+
pullToRefreshState.completeRefreshing {} // 完成刷新时的回调
69+
}
70+
```
71+
72+
## 属性
73+
74+
### PullToRefresh 属性
75+
76+
| 属性名 | 类型 | 默认值 | 说明 |
77+
| ------------------ | ---------------------- | -------------------------------------- | ------------------------ |
78+
| pullToRefreshState | PullToRefreshState | - | 下拉刷新状态控制器 |
79+
| onRefresh | () -> Unit | {} | 刷新触发时的回调函数 |
80+
| modifier | Modifier | Modifier | 应用于容器的修饰符 |
81+
| color | Color | PullToRefreshDefaults.color | 刷新指示器的颜色 |
82+
| circleSize | Dp | PullToRefreshDefaults.circleSize | 刷新指示器圆圈的大小 |
83+
| refreshTexts | List\<String> | PullToRefreshDefaults.refreshTexts | 不同状态下显示的文本列表 |
84+
| refreshTextStyle | TextStyle | PullToRefreshDefaults.refreshTextStyle | 刷新文本的样式 |
85+
| content | @Composable () -> Unit | - | 可滚动内容的可组合函数 |
86+
87+
### PullToRefreshState 类
88+
89+
PullToRefreshState 是控制下拉刷新状态的类,可以通过 `rememberPullToRefreshState()` 创建。
90+
91+
#### 属性
92+
93+
| 属性名 | 类型 | 说明 |
94+
| --------------------------- | ------------ | ------------------- |
95+
| refreshState | RefreshState | 当前刷新状态 |
96+
| isRefreshing | Boolean | 是否正在刷新 |
97+
| pullProgress | Float | 下拉进度(0-1之间) |
98+
| refreshCompleteAnimProgress | Float | 刷新完成动画进度 |
99+
100+
#### 方法
101+
102+
| 方法名 | 参数 | 返回类型 | 说明 |
103+
| ------------------ | -------------------- | -------- | ------------------------ |
104+
| completeRefreshing | (suspend () -> Unit) | - | 完成刷新并执行提供的操作 |
105+
106+
### PullToRefreshDefaults 对象
107+
108+
PullToRefreshDefaults 对象提供了下拉刷新组件的默认值。
109+
110+
| 属性名 | 类型 | 默认值 | 说明 |
111+
| ---------------- | ------------- | --------------------------------------------------- | -------------------- |
112+
| color | Color | Color.Gray | 刷新指示器的默认颜色 |
113+
| circleSize | Dp | 20.dp | 指示器圆圈的默认大小 |
114+
| refreshTexts | List\<String> | ["Pull down to refresh", "Release to refresh", ...] | 默认的刷新文本列表 |
115+
| refreshTextStyle | TextStyle | TextStyle(fontSize = 14.sp, fontWeight = Bold, ...) | 默认的文本样式 |
116+
117+
## 进阶用法
118+
119+
### 自定义刷新指示器颜色
120+
121+
```kotlin
122+
val pullToRefreshState = rememberPullToRefreshState()
123+
PullToRefresh(
124+
pullToRefreshState = pullToRefreshState,
125+
color = Color.Blue,
126+
onRefresh = {
127+
// 执行刷新操作
128+
}
129+
) {
130+
// 内容
131+
}
132+
```
133+
134+
### 自定义刷新文本
135+
136+
```kotlin
137+
val pullToRefreshState = rememberPullToRefreshState()
138+
PullToRefresh(
139+
pullToRefreshState = pullToRefreshState,
140+
refreshTexts = listOf(
141+
"下拉刷新",
142+
"松开刷新",
143+
"正在刷新",
144+
"刷新成功"
145+
),
146+
onRefresh = {
147+
// 执行刷新操作
148+
}
149+
) {
150+
// 内容
151+
}
152+
```
153+
154+
### 结合加载状态使用
155+
156+
```kotlin
157+
val pullToRefreshState = rememberPullToRefreshState()
158+
var items by remember { mutableStateOf(List(5) { "Item $it" }) }
159+
val scope = rememberCoroutineScope()
160+
PullToRefresh(
161+
pullToRefreshState = pullToRefreshState,
162+
onRefresh = {
163+
scope.launch {
164+
delay(2000) // 模拟刷新操作
165+
pullToRefreshState.completeRefreshing {
166+
items = List(8) { "Updated Item $it" }
167+
}
168+
}
169+
}
170+
) {
171+
LazyColumn(
172+
modifier = Modifier.fillMaxSize()
173+
) {
174+
items(items.size) { item ->
175+
Text(
176+
text = items[item],
177+
modifier = Modifier
178+
.padding(16.dp)
179+
.fillMaxSize()
180+
)
181+
}
182+
}
183+
}
184+
```

docs/components/topappbar.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ TopAppBar(
180180

181181
### 大标题和小标题结合使用
182182

183-
你可以使用 foundation 提供的 BoxWithConstraints 方法或者 Miuix 提供的 `getWindowSize()` 方法来获取当前窗口的尺寸,并根据窗口的宽度来决定使用大标题还是小标题。
183+
你可以使用 foundation 提供的 BoxWithConstraints 方法或者 Miuix 提供的 [getWindowSize()](../guide/multiplatform.md#窗口尺寸管理) 方法来获取当前窗口的尺寸,并根据窗口的宽度来决定使用大标题还是小标题。
184184

185185
```kotlin
186186
var useSmallTopBar by remember { mutableStateOf(false) }

0 commit comments

Comments
 (0)