pref: 迁移至 Foundation.Pager

This commit is contained in:
HuanCheng65 2023-05-05 23:52:25 +08:00
parent 7d8c7ed3e6
commit 15e9b747d9
No known key found for this signature in database
GPG Key ID: 5EC9DD60A32C7360
8 changed files with 34 additions and 37 deletions

View File

@ -148,9 +148,6 @@ dependencies {
implementation "com.google.accompanist:accompanist-insets-ui:$accompanist_version" implementation "com.google.accompanist:accompanist-insets-ui:$accompanist_version"
implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanist_version" implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanist_version"
implementation "com.google.accompanist:accompanist-placeholder-material:$accompanist_version" implementation "com.google.accompanist:accompanist-placeholder-material:$accompanist_version"
implementation "com.google.accompanist:accompanist-pager:$accompanist_version"
implementation "com.google.accompanist:accompanist-pager-indicators:$accompanist_version"
implementation "com.google.accompanist:accompanist-swiperefresh:$accompanist_version"
implementation "com.google.accompanist:accompanist-webview:$accompanist_version" implementation "com.google.accompanist:accompanist-webview:$accompanist_version"
def sketch_version = "3.2.0" def sketch_version = "3.2.0"

View File

@ -6,6 +6,7 @@ import android.graphics.Typeface
import android.net.Uri import android.net.Uri
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.foundation.interaction.PressInteraction
@ -25,6 +26,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ButtonDefaults import androidx.compose.material.ButtonDefaults
@ -75,9 +78,6 @@ import androidx.datastore.preferences.core.intPreferencesKey
import com.germainkevin.collapsingtopbar.CollapsingTopBar import com.germainkevin.collapsingtopbar.CollapsingTopBar
import com.germainkevin.collapsingtopbar.CollapsingTopBarDefaults import com.germainkevin.collapsingtopbar.CollapsingTopBarDefaults
import com.germainkevin.collapsingtopbar.rememberCollapsingTopBarScrollBehavior import com.germainkevin.collapsingtopbar.rememberCollapsingTopBarScrollBehavior
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import com.google.accompanist.placeholder.PlaceholderHighlight import com.google.accompanist.placeholder.PlaceholderHighlight
import com.google.accompanist.placeholder.material.fade import com.google.accompanist.placeholder.material.fade
import com.google.accompanist.placeholder.material.placeholder import com.google.accompanist.placeholder.material.placeholder
@ -347,7 +347,7 @@ private suspend fun sendToDesktop(
) )
} }
@OptIn(ExperimentalPagerApi::class, ExperimentalTextApi::class) @OptIn(ExperimentalTextApi::class, ExperimentalFoundationApi::class)
@Destination( @Destination(
deepLinks = [ deepLinks = [
DeepLink(uriPattern = "tblite://forum/{forumName}") DeepLink(uriPattern = "tblite://forum/{forumName}")
@ -815,7 +815,7 @@ fun ForumPage(
Column(modifier = Modifier.padding(contentPadding)) { Column(modifier = Modifier.padding(contentPadding)) {
if (forum != null) { if (forum != null) {
HorizontalPager( HorizontalPager(
count = 2, pageCount = 2,
state = pagerState, state = pagerState,
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
verticalAlignment = Alignment.Top, verticalAlignment = Alignment.Top,

View File

@ -1,7 +1,10 @@
package com.huanchengfly.tieba.post.ui.page.history package com.huanchengfly.tieba.post.ui.page.history
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.IconButton import androidx.compose.material.IconButton
import androidx.compose.material.Tab import androidx.compose.material.Tab
@ -20,9 +23,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme
import com.huanchengfly.tieba.post.ui.page.ProvideNavigator import com.huanchengfly.tieba.post.ui.page.ProvideNavigator
@ -39,7 +39,7 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalPagerApi::class) @OptIn(ExperimentalFoundationApi::class)
@Destination( @Destination(
deepLinks = [ deepLinks = [
DeepLink(uriPattern = "tblite://history") DeepLink(uriPattern = "tblite://history")
@ -141,7 +141,7 @@ fun HistoryPage(
) { ) {
ProvideNavigator(navigator = navigator) { ProvideNavigator(navigator = navigator) {
HorizontalPager( HorizontalPager(
count = 2, pageCount = 2,
state = pagerState, state = pagerState,
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
verticalAlignment = Alignment.Top, verticalAlignment = Alignment.Top,

View File

@ -2,10 +2,13 @@ package com.huanchengfly.tieba.post.ui.page.main
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.Scaffold import androidx.compose.material.Scaffold
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AccountCircle import androidx.compose.material.icons.outlined.AccountCircle
@ -27,9 +30,6 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource import androidx.compose.ui.res.vectorResource
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import com.huanchengfly.tieba.post.LocalNotificationCountFlow import com.huanchengfly.tieba.post.LocalNotificationCountFlow
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
import com.huanchengfly.tieba.post.arch.BaseComposeActivity.Companion.LocalWindowSizeClass import com.huanchengfly.tieba.post.arch.BaseComposeActivity.Companion.LocalWindowSizeClass
@ -91,7 +91,7 @@ private fun NavigationWrapper(
} }
} }
@OptIn(ExperimentalPagerApi::class) @OptIn(ExperimentalFoundationApi::class)
@RootNavGraph(start = true) @RootNavGraph(start = true)
@Destination @Destination
@Composable @Composable
@ -243,7 +243,7 @@ fun MainPage(
) { paddingValues -> ) { paddingValues ->
HorizontalPager( HorizontalPager(
contentPadding = paddingValues, contentPadding = paddingValues,
count = navigationItems.size, pageCount = navigationItems.size,
state = pagerState, state = pagerState,
key = { navigationItems[it].title }, key = { navigationItems[it].title },
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),

View File

@ -1,7 +1,10 @@
package com.huanchengfly.tieba.post.ui.page.main.explore package com.huanchengfly.tieba.post.ui.page.main.explore
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.Scaffold import androidx.compose.material.Scaffold
import androidx.compose.material.Tab import androidx.compose.material.Tab
import androidx.compose.material.TabRow import androidx.compose.material.TabRow
@ -17,9 +20,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
import com.huanchengfly.tieba.post.activities.NewSearchActivity import com.huanchengfly.tieba.post.activities.NewSearchActivity
import com.huanchengfly.tieba.post.arch.onEvent import com.huanchengfly.tieba.post.arch.onEvent
@ -39,7 +39,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalPagerApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun ExplorePage( fun ExplorePage(
eventFlow: Flow<MainUiEvent>, eventFlow: Flow<MainUiEvent>,
@ -127,7 +127,7 @@ fun ExplorePage(
) { paddingValues -> ) { paddingValues ->
HorizontalPager( HorizontalPager(
contentPadding = paddingValues, contentPadding = paddingValues,
count = pages.size, pageCount = pages.size,
state = pagerState, state = pagerState,
key = { pages[it].first }, key = { pages[it].first },
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),

View File

@ -1,6 +1,9 @@
package com.huanchengfly.tieba.post.ui.page.main.notifications package com.huanchengfly.tieba.post.ui.page.main.notifications
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.Scaffold import androidx.compose.material.Scaffold
import androidx.compose.material.Tab import androidx.compose.material.Tab
import androidx.compose.material.TabRow import androidx.compose.material.TabRow
@ -14,9 +17,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
import com.huanchengfly.tieba.post.activities.NewSearchActivity import com.huanchengfly.tieba.post.activities.NewSearchActivity
import com.huanchengfly.tieba.post.goToActivity import com.huanchengfly.tieba.post.goToActivity
@ -29,7 +29,7 @@ import com.huanchengfly.tieba.post.ui.widgets.compose.Toolbar
import com.huanchengfly.tieba.post.ui.widgets.compose.accountNavIconIfCompact import com.huanchengfly.tieba.post.ui.widgets.compose.accountNavIconIfCompact
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalPagerApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun NotificationsPage() { fun NotificationsPage() {
val context = LocalContext.current val context = LocalContext.current
@ -88,7 +88,7 @@ fun NotificationsPage() {
) { paddingValues -> ) { paddingValues ->
HorizontalPager( HorizontalPager(
contentPadding = paddingValues, contentPadding = paddingValues,
count = pages.size, pageCount = pages.size,
state = pagerState, state = pagerState,
key = { pages[it].first }, key = { pages[it].first },
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),

View File

@ -1,5 +1,6 @@
package com.huanchengfly.tieba.post.ui.page.settings.block package com.huanchengfly.tieba.post.ui.page.settings.block
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -13,6 +14,8 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.DropdownMenuItem import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
@ -39,9 +42,6 @@ import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import com.google.accompanist.placeholder.material.placeholder import com.google.accompanist.placeholder.material.placeholder
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
@ -65,7 +65,7 @@ import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalPagerApi::class) @OptIn(ExperimentalFoundationApi::class)
@Destination @Destination
@Composable @Composable
fun BlockSettingsPage( fun BlockSettingsPage(
@ -193,7 +193,7 @@ fun BlockSettingsPage(
) )
} }
HorizontalPager( HorizontalPager(
count = 2, pageCount = 2,
state = pagerState, state = pagerState,
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentPadding = paddingValues, contentPadding = paddingValues,

View File

@ -1,6 +1,7 @@
package com.huanchengfly.tieba.post.ui.widgets.compose package com.huanchengfly.tieba.post.ui.widgets.compose
import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.LocalContentColor import androidx.compose.material.LocalContentColor
import androidx.compose.material.TabPosition import androidx.compose.material.TabPosition
@ -18,10 +20,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.lerp import androidx.compose.ui.unit.lerp
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.PagerState
@OptIn(ExperimentalPagerApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun PagerTabIndicator( fun PagerTabIndicator(
pagerState: PagerState, pagerState: PagerState,
@ -33,7 +33,7 @@ fun PagerTabIndicator(
val currentTab = tabPositions[currentPage] val currentTab = tabPositions[currentPage]
val prevTab = tabPositions.getOrNull(currentPage - 1) val prevTab = tabPositions.getOrNull(currentPage - 1)
val nextTab = tabPositions.getOrNull(currentPage + 1) val nextTab = tabPositions.getOrNull(currentPage + 1)
val fraction = pagerState.currentPageOffset val fraction = pagerState.currentPageOffsetFraction
val currentTabLeft = currentTab.left + (currentTab.width / 2 - tabWidth / 2) val currentTabLeft = currentTab.left + (currentTab.width / 2 - tabWidth / 2)
val indicatorOffset = if (fraction > 0 && nextTab != null) { val indicatorOffset = if (fraction > 0 && nextTab != null) {
val nextTabLeft = nextTab.left + (nextTab.width / 2 - tabWidth / 2) val nextTabLeft = nextTab.left + (nextTab.width / 2 - tabWidth / 2)