跳转到内容

PullToRefresh

PullToRefresh 是 Miuix 中的下拉刷新组件,可为列表和其他可滚动内容提供刷新功能。它采用“状态提升”模式,提供了带动画的交互式刷新指示器,适用于需要刷新数据的各种场景。

注意

该组件只适用于支持触控的场景,并且在网页构建目标中工作不佳!

如需演示,请查看 Miuix Example 的 DropDown 页。

引入

kotlin
import top.yukonga.miuix.kmp.basic.PullToRefresh
import top.yukonga.miuix.kmp.basic.rememberPullToRefreshState

基本用法

PullToRefresh 组件可以包裹任何可滚动的内容,采用“状态提升”模式:

kotlin
var isRefreshing by rememberSaveable { mutableStateOf(false) }
val pullToRefreshState = rememberPullToRefreshState()
var items by remember { mutableStateOf(1) }

LaunchedEffect(isRefreshing) {
    if (isRefreshing) {
        delay(500)
        items += 6
        isRefreshing = false
    }
}

Surface {
    PullToRefresh(
        isRefreshing = isRefreshing,
        onRefresh = { isRefreshing = true },
        pullToRefreshState = pullToRefreshState,
    ) {
        LazyColumn(
            modifier = Modifier.fillMaxSize()
        ) {
            items(items) { index ->
                SuperArrow(
                    title = "Item $index",
                    modifier = Modifier.padding(horizontal = 16.dp),
                    onClick = { /* 点击事件 */ }
                )
            }
        }
    }
}

组件状态

PullToRefresh 组件有以下几种状态:

  1. Idle:初始状态,无交互
  2. Pulling:用户正在下拉但尚未达到刷新阈值
  3. ThresholdReached:下拉达到阈值,松开可以刷新
  4. Refreshing:正在刷新
  5. RefreshComplete:刷新完成,正在回到初始状态

属性

PullToRefresh 属性

属性名类型说明默认值是否必须
isRefreshingBoolean是否正在刷新
onRefresh() -> Unit刷新触发时的回调函数
modifierModifier应用于容器的修饰符Modifier
pullToRefreshStatePullToRefreshState下拉刷新状态控制器rememberPullToRefreshState()
contentPaddingPaddingValues内容区的内边距PaddingValues(0.dp)
topAppBarScrollBehaviorScrollBehavior顶部应用栏滚动行为null
colorColor刷新指示器的颜色PullToRefreshDefaults.color
circleSizeDp刷新指示器圆圈的大小PullToRefreshDefaults.circleSize
refreshTextsList<String>不同状态下显示的文本列表PullToRefreshDefaults.refreshTexts
refreshTextStyleTextStyle刷新文本的样式PullToRefreshDefaults.refreshTextStyle
content@Composable () -> Unit可滚动内容的可组合函数

PullToRefreshState 类

PullToRefreshState 用于管理刷新指示器的 UI 状态,可通过 rememberPullToRefreshState() 创建。

属性名类型说明
refreshStateRefreshState当前刷新状态
isRefreshingBoolean是否正在刷新
pullProgressFloat下拉进度(0-1之间)
refreshCompleteAnimProgressFloat刷新完成动画进度

注意:PullToRefreshState 仅用于 UI 状态管理,刷新逻辑应通过 isRefreshingonRefresh 控制。

PullToRefreshDefaults 对象

PullToRefreshDefaults 提供下拉刷新组件的默认值。

属性名类型说明默认值
colorColor刷新指示器的默认颜色Color.Gray
circleSizeDp指示器圆圈的默认大小20.dp
refreshTextsList<String>默认的刷新文本列表["Pull down to refresh", "Release to refresh", "Refreshing...", "Refreshed successfully"]
refreshTextStyleTextStyle默认的文本样式TextStyle(fontSize = 14.sp, fontWeight = Bold, color = color)

进阶用法

自定义刷新指示器颜色

kotlin
PullToRefresh(
    color = Color.Blue,
    isRefreshing = isRefreshing,
    onRefresh = { isRefreshing = true },
    pullToRefreshState = pullToRefreshState
) {
    // 内容
}

自定义刷新文本

kotlin
PullToRefresh(
    isRefreshing = isRefreshing,
    onRefresh = { isRefreshing = true },
    pullToRefreshState = pullToRefreshState,
    refreshTexts = listOf(
        "下拉刷新",
        "松开刷新",
        "正在刷新",
        "刷新成功"
    )
) {
    // 内容
}

基于 Apache-2.0 许可发布