|
@@ -21,11 +21,10 @@ import kotlin.math.absoluteValue
|
|
|
|
|
|
@Stable
|
|
@Stable
|
|
class TabPagerState(
|
|
class TabPagerState(
|
|
- val pageCount: Int,
|
|
|
|
- val initialPageIndex: Int,
|
|
|
|
- val onPageChanged: ((Int) -> Unit)?
|
|
|
|
|
|
+ pageIndexState: MutableState<Int>,
|
|
|
|
+ val pageCount: Int
|
|
) {
|
|
) {
|
|
- var pageIndex by mutableStateOf(initialPageIndex)
|
|
|
|
|
|
+ var pageIndex by pageIndexState
|
|
|
|
|
|
var tempPageIndex by mutableStateOf<Int?>(null)
|
|
var tempPageIndex by mutableStateOf<Int?>(null)
|
|
|
|
|
|
@@ -42,14 +41,14 @@ class TabPagerState(
|
|
if (newPageIndex > pageIndex) {
|
|
if (newPageIndex > pageIndex) {
|
|
animatable.animateTo(
|
|
animatable.animateTo(
|
|
animatable.upperBound!!, tween(
|
|
animatable.upperBound!!, tween(
|
|
- durationMillis = 300,
|
|
|
|
|
|
+ durationMillis = 3000,
|
|
easing = FastOutSlowInEasing
|
|
easing = FastOutSlowInEasing
|
|
)
|
|
)
|
|
)
|
|
)
|
|
} else if (newPageIndex < pageIndex) {
|
|
} else if (newPageIndex < pageIndex) {
|
|
animatable.animateTo(
|
|
animatable.animateTo(
|
|
animatable.lowerBound!!, tween(
|
|
animatable.lowerBound!!, tween(
|
|
- durationMillis = 300,
|
|
|
|
|
|
+ durationMillis = 3000,
|
|
easing = FastOutSlowInEasing
|
|
easing = FastOutSlowInEasing
|
|
)
|
|
)
|
|
)
|
|
)
|
|
@@ -58,17 +57,25 @@ class TabPagerState(
|
|
pageIndex = newPageIndex
|
|
pageIndex = newPageIndex
|
|
animatable.snapTo(0f)
|
|
animatable.snapTo(0f)
|
|
tempPageIndex = null
|
|
tempPageIndex = null
|
|
- onPageChanged?.invoke(newPageIndex)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Composable
|
|
@Composable
|
|
-fun rememberTabPagerState(initialPageIndex: Int, pageCount: Int, onPageChanged: ((Int) -> Unit)? = null): TabPagerState {
|
|
|
|
|
|
+fun rememberTabPagerState(pageIndexState: MutableState<Int>, pageCount: Int): TabPagerState {
|
|
return remember {
|
|
return remember {
|
|
TabPagerState(
|
|
TabPagerState(
|
|
|
|
+ pageIndexState = pageIndexState,
|
|
pageCount = pageCount,
|
|
pageCount = pageCount,
|
|
- initialPageIndex = initialPageIndex,
|
|
|
|
- onPageChanged = onPageChanged
|
|
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+@Composable
|
|
|
|
+fun rememberTabPagerState(initialPageIndex: Int, pageCount: Int): TabPagerState {
|
|
|
|
+ return remember {
|
|
|
|
+ TabPagerState(
|
|
|
|
+ pageIndexState = mutableStateOf(initialPageIndex),
|
|
|
|
+ pageCount = pageCount
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -125,7 +132,6 @@ fun HorizontalTabPager(
|
|
.plus(1)
|
|
.plus(1)
|
|
.coerceAtMost(state.pageCount - 1)
|
|
.coerceAtMost(state.pageCount - 1)
|
|
state.animatable.snapTo(0f)
|
|
state.animatable.snapTo(0f)
|
|
- state.onPageChanged?.invoke(state.pageIndex)
|
|
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
state.animatable.animateTo(
|
|
state.animatable.animateTo(
|
|
@@ -137,7 +143,6 @@ fun HorizontalTabPager(
|
|
.minus(1)
|
|
.minus(1)
|
|
.coerceAtLeast(0)
|
|
.coerceAtLeast(0)
|
|
state.animatable.snapTo(0f)
|
|
state.animatable.snapTo(0f)
|
|
- state.onPageChanged?.invoke(state.pageIndex)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|