[Android] 019. プルダウンリフレッシュ(PullToRefreshBox)

https://bps-e.com/dev/android-003-039/ で試したプルダウンリフレッシュを使うタイミングが来そうだったので、今の環境で確認してたらCompose BOM 2024.09でMaterial3向けのPullToRefreshBoxが追加されていることに気が付きましたので試しました
https://developer.android.com/reference/kotlin/androidx/compose/material3/pulltorefresh/package-summary

thresholdを指定したい場合などIndicatorをカスタマイズする必要がなければ、もっと簡略化したコードで実装できます

@OptIn(ExperimentalMaterial3Api::class)
@Preview(showBackground = true)
@Composable
fun Screen(modifier: Modifier = Modifier) {
    var isRefreshing by remember { mutableStateOf(false) }
    val state = rememberPullToRefreshState()
    val scope = rememberCoroutineScope()

    PullToRefreshBox(
        isRefreshing,
        onRefresh = {
            isRefreshing = true
            scope.launch {
                delay(2_000)
                isRefreshing = false
            }
        },
        modifier = modifier,
        state = state,
        indicator = {
            Indicator(
                modifier = Modifier.align(Alignment.TopCenter),
                isRefreshing = isRefreshing,
                state = state,
                threshold = 100.dp
            )
        }
    ) {
        Column(
            Modifier
                .fillMaxSize()
                .verticalScroll(rememberScrollState()),
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text("PullToRefreshBox")
        }
    }
}

Android Studio Koala Feature Drop 2024.1.2 built on August 23, 2024