Skip to content

Commit 2d35bc7

Browse files
committed
Backport On-Boarding click function fix
1 parent 962c9b6 commit 2d35bc7

File tree

1 file changed

+20
-17
lines changed
  • presentation/src/main/java/com/shifthackz/aisdv1/presentation/screen/onboarding

1 file changed

+20
-17
lines changed

presentation/src/main/java/com/shifthackz/aisdv1/presentation/screen/onboarding/OnBoardingScreen.kt

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ import androidx.compose.material3.OutlinedButton
2828
import androidx.compose.material3.Scaffold
2929
import androidx.compose.runtime.Composable
3030
import androidx.compose.runtime.getValue
31+
import androidx.compose.runtime.mutableStateOf
32+
import androidx.compose.runtime.remember
3133
import androidx.compose.runtime.rememberCoroutineScope
34+
import androidx.compose.runtime.setValue
3235
import androidx.compose.ui.Alignment
3336
import androidx.compose.ui.Modifier
3437
import androidx.compose.ui.draw.alpha
@@ -41,6 +44,7 @@ import com.shifthackz.aisdv1.presentation.screen.onboarding.page.FormPageContent
4144
import com.shifthackz.aisdv1.presentation.screen.onboarding.page.LocalDiffusionPageContent
4245
import com.shifthackz.aisdv1.presentation.screen.onboarding.page.LookAndFeelPageContent
4346
import com.shifthackz.aisdv1.presentation.screen.onboarding.page.ProviderPageContent
47+
import kotlinx.coroutines.Job
4448
import 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

Comments
 (0)