如何使用Material 3进行滑动(拉动)刷新?

use*_*924 9 android android-jetpack-compose android-jetpack-compose-material3

val pullRefreshState = rememberPullRefreshState(loadStatus is LoadState.Loading, onRefresh = {
    photosResponse.refresh()
})
Box(
    modifier
        .fillMaxSize()
        .pullRefresh(pullRefreshState)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我已将材料 2 更新为材料 3:

api(libs.androidx.compose.material3) // group = "androidx.compose.material3", name = "material3"
Run Code Online (Sandbox Code Playgroud)

但现在无法使用滑动刷新,没有任何东西可以导入

Ste*_*goo 4

Pull-to-refresh 正式版已经发布进行 Beta 测试。确保您拥有 Material31.2.0-beta01或更高版本。

implementation("androidx.compose.material3:material3:1.2.0-beta01")

然后查看此处的示例。如果 Android 文档中的内容发生变化,我将粘贴示例以供将来参考:

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.ListItem
import androidx.compose.material3.Text
import androidx.compose.material3.pulltorefresh.PullToRefreshContainer
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.input.nestedscroll.nestedScroll

var itemCount by remember { mutableStateOf(15) }
val state = rememberPullToRefreshState()
if (state.isRefreshing) {
    LaunchedEffect(true) {
        // fetch something
        delay(1500)
        itemCount += 5
        state.endRefresh()
    }
}
Box(Modifier.nestedScroll(state.nestedScrollConnection)) {
    LazyColumn(Modifier.fillMaxSize()) {
        if (!state.isRefreshing) {
            items(itemCount) {
                ListItem({ Text(text = "Item ${itemCount - it}") })
            }
        }
    }
    PullToRefreshContainer(
        modifier = Modifier.align(Alignment.TopCenter),
        state = state,
    )
}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!