替换 Jetpack Compose 中的 GlobalScope.launch

replace GlobalScope.launch in jetpack compose

我正在用 jetpack compose 编写一些寻呼机代码,遇到需要通过单击按钮更改页码的情况。这是我的按钮点击事件:

onClick = {pagerState.scrollToPage(page=currentPager+1)}

但是当我这样做时我得到这个错误:Suspend function 'scrollToPage' should be called only from a coroutine or another suspend function

我通过添加解决了这个问题:

onClick = {GlobalScope.launch (Dispatchers.Main) {pagerState.scrollToPage(page=currentPager+1)}}

但仍然GlobalScope.launch不推荐。上面的 onClick 在基本的 compose 函数中被调用。我该如何解决 Jetpack Compose 中的这个问题?

您应该使用下面的代码在您的可组合项中创建协程范围。

val coroutinesScope = rememberCoroutineScope()

请注意,您只能在可组合项内调用它,因此您不能在 onClick() 内创建 coroutinesScope 并且必须在可组合项的顶部对其进行初始化。

阅读此文档:Accompanist Pager

这是一个原始代码:Raw code for scroll to page

如果你想跳转到特定的页面,你可以在CoroutineScope中调用pagerState.scrollToPage(index)或pagerState.animateScrollToPage(index)方法:

val pagerState = rememberPagerState()
val scope = rememberCoroutineScope()

HorizontalPager(count = 10, state = pagerState) { page ->
    // ...page content
}

// Later, scroll to page 2
scope.launch {
    pagerState.scrollToPage(2)
}