替换 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)
}
我正在用 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)
}