Jetpack Compose 的 rememberLazyListState() 使用 scrollToItem 的问题

出现报错:
Suspend function 'scrollToItem' should be called only from a coroutine or another suspend function
源代码:

val scrollState = rememberLazyListState()
Column {
        Row {
            Button(modifier = Modifier.weight(1f), onClick = {
                    scrollState.scrollToItem(0)
            }) {
                Text(text = "Scroll to the top")
            }
            Button(modifier = Modifier.weight(1f), onClick = {
                    scrollState.scrollToItem(99)
            }) {
                Text(text = "Scroll to the end")
            }
        }

        LazyColumn(state = scrollState) {
            items(100) {
                ImageListItem(index = it)
            }
        }
    }

但是scrollState.scrollToItem(0)这个位置爆红,问人工智能也没有,最后度娘之后找到:

scrollToItem() 和 animateScrollToItem() 都是挂起函数,这意味着我们需要在协同例程中调用它们

将代码改为下面的内容即可:

val scrollState = rememberLazyListState()
val coroutineScope = rememberCoroutineScope()
Column {
        Row {
            Button(modifier = Modifier.weight(1f), onClick = {
                coroutineScope.launch {
                    scrollState.scrollToItem(0)
                }
            }) {
                Text(text = "Scroll to the top")
            }
            Button(modifier = Modifier.weight(1f), onClick = {
                coroutineScope.launch {
                    scrollState.scrollToItem(99)
                }
            }) {
                Text(text = "Scroll to the end")
            }
        }

        LazyColumn(state = scrollState) {
            items(100) {
                ImageListItem(index = it)
            }
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值