Home > Enterprise >  replace GlobalScope.launch in jetpack compose
replace GlobalScope.launch in jetpack compose

Time:11-12

I am writing some pager code in jetpack compose and came to a situation where I need to change page number by button click. This is my event on button click:

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

but when I do this I get this error: Suspend function 'scrollToPage' should be called only from a coroutine or another suspend function

I got a solution to this by adding:

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

but still GlobalScope.launch is not recommended. Above onClick are called inside basic compose functions. How can I fix this issue in jetpack compose?

CodePudding user response:

You should use the code below to create a coroutines scope in your composable.

val coroutinesScope = rememberCoroutineScope()

Note that you can only call this inside a composable so you cannot create coroutinesScope inside your onClick() and have to initialize it on the top of your composable.

CodePudding user response:

Go through this documentation : Accompanist Pager

Here is a raw code: Raw code for scroll to page

If you want to jump to a specific page, you either call call pagerState.scrollToPage(index) or pagerState.animateScrollToPage(index) method in a CoroutineScope:

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

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

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