替换 jetpack compose 中的 GlobalScope.launch

Ank*_*hah 6 android kotlin android-jetpack kotlin-coroutines android-jetpack-compose

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

onClick = {pagerState.scrollToPage(page=currentPager+1)}
Run Code Online (Sandbox Code Playgroud)

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

我通过添加以下内容找到了解决方案:

onClick = {GlobalScope.launch (Dispatchers.Main) {pagerState.scrollToPage(page=currentPager+1)}}
Run Code Online (Sandbox Code Playgroud)

但仍然不建议使用 GlobalScope.launch 。上面的 onClick 在基本 compose 函数中调用。如何解决 jetpack compose 中的此问题?

Dee*_*Shu 12

浏览此文档:伴奏寻呼机

这是原始代码:滚动到页面的原始代码

如果要跳转到特定页面,可以在 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)
}
Run Code Online (Sandbox Code Playgroud)


Yas*_*ass 7

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

val coroutinesScope = rememberCoroutineScope()
Run Code Online (Sandbox Code Playgroud)

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