Skip to content

PullToRefreshBox

Requires @OptIn(ExperimentalMaterial3Api::class)

implementation("androidx.compose.material3:material3:1.3.0")
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun PullToRefreshExample() {
var isRefreshing by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()
PullToRefreshBox(
isRefreshing = isRefreshing,
onRefresh = {
scope.launch {
isRefreshing = true
// Simulate loading
delay(2000)
isRefreshing = false
}
}
) {
LazyColumn(Modifier.fillMaxSize()) {
items(100) {
Text("Item $it", modifier = Modifier.padding(16.dp))
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CustomPullToRefresh() {
var isRefreshing by remember { mutableStateOf(false) }
val state = rememberPullToRefreshState()
val scope = rememberCoroutineScope()
PullToRefreshBox(
isRefreshing = isRefreshing,
onRefresh = {
scope.launch {
isRefreshing = true
delay(2000)
isRefreshing = false
}
},
state = state,
indicator = {
PullToRefreshDefaults.Indicator(
state = state,
isRefreshing = isRefreshing,
modifier = Modifier.align(Alignment.TopCenter),
color = MaterialTheme.colorScheme.primary
)
}
) {
// Content here
}
}
  • isRefreshing: Boolean - Whether the refresh indicator should be shown
  • onRefresh: () -> Unit - Callback when user triggers refresh
  • state: PullToRefreshState - State object to control the pull gesture
  • indicator: @Composable - Custom indicator composable