@@ -28,7 +28,10 @@ import androidx.compose.material3.OutlinedButton
2828import androidx.compose.material3.Scaffold
2929import androidx.compose.runtime.Composable
3030import androidx.compose.runtime.getValue
31+ import androidx.compose.runtime.mutableStateOf
32+ import androidx.compose.runtime.remember
3133import androidx.compose.runtime.rememberCoroutineScope
34+ import androidx.compose.runtime.setValue
3235import androidx.compose.ui.Alignment
3336import androidx.compose.ui.Modifier
3437import androidx.compose.ui.draw.alpha
@@ -41,6 +44,7 @@ import com.shifthackz.aisdv1.presentation.screen.onboarding.page.FormPageContent
4144import com.shifthackz.aisdv1.presentation.screen.onboarding.page.LocalDiffusionPageContent
4245import com.shifthackz.aisdv1.presentation.screen.onboarding.page.LookAndFeelPageContent
4346import com.shifthackz.aisdv1.presentation.screen.onboarding.page.ProviderPageContent
47+ import kotlinx.coroutines.Job
4448import kotlinx.coroutines.launch
4549
4650@Composable
@@ -69,14 +73,23 @@ private fun OnBoardingScreenContent(
6973 initialPage = OnBoardingPage .entries.first().ordinal,
7074 pageCount = { OnBoardingPage .entries.size },
7175 )
72- BackHandler (pagerState.currentPage > 0 ) {
73- scope.launch {
76+
77+ var scrollAnimationJob: Job ? by remember { mutableStateOf(null ) }
78+
79+ fun scrollToPage (page : Int ) {
80+ if (scrollAnimationJob != null ) return
81+ scrollAnimationJob = scope.launch {
7482 pagerState.animateScrollToPage(
75- page = pagerState.currentPage - 1 ,
83+ page = page ,
7684 animationSpec = onBoardingPageAnimation,
7785 )
78- }
86+ }. apply { invokeOnCompletion { scrollAnimationJob = null } }
7987 }
88+
89+ BackHandler (pagerState.currentPage > 0 ) {
90+ scrollToPage(pagerState.currentPage - 1 )
91+ }
92+
8093 Scaffold (
8194 modifier = Modifier .fillMaxSize(),
8295 bottomBar = {
@@ -113,12 +126,7 @@ private fun OnBoardingScreenContent(
113126 contentPadding = PaddingValues (0 .dp),
114127 onClick = {
115128 if (pagerState.currentPage > 0 ) {
116- scope.launch {
117- pagerState.animateScrollToPage(
118- page = pagerState.currentPage - 1 ,
119- animationSpec = onBoardingPageAnimation,
120- )
121- }
129+ scrollToPage(pagerState.currentPage - 1 )
122130 } else if (pagerState.currentPage == 0 && launchSource == LaunchSource .SETTINGS ) {
123131 processIntent(OnBoardingIntent .Navigate )
124132 }
@@ -127,7 +135,7 @@ private fun OnBoardingScreenContent(
127135 Icon (
128136 modifier = Modifier .rotate(180f ),
129137 imageVector = Icons .Default .DoubleArrow ,
130- contentDescription = " Next " ,
138+ contentDescription = " Back " ,
131139 )
132140 }
133141 Spacer (modifier = Modifier .weight(1f ))
@@ -156,12 +164,7 @@ private fun OnBoardingScreenContent(
156164 if (pagerState.currentPage == OnBoardingPage .entries.size - 1 ) {
157165 processIntent(OnBoardingIntent .Navigate )
158166 } else {
159- scope.launch {
160- pagerState.animateScrollToPage(
161- page = pagerState.currentPage + 1 ,
162- animationSpec = onBoardingPageAnimation,
163- )
164- }
167+ scrollToPage(pagerState.currentPage + 1 )
165168 }
166169 },
167170 ) {
0 commit comments