Skip to content

Commit 762abf1

Browse files
committed
feat: auto-scroll to the current episode in EpisodesScrollRow
1 parent 08a6152 commit 762abf1

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

composeApp/src/commonMain/kotlin/com/jankinwu/fntv/client/ui/component/detail/EpisodesScrollRow.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,16 @@ fun EpisodesScrollRow(
8888
episodes: List<EpisodeListResponse>,
8989
navigator: ComponentNavigator,
9090
modifier: Modifier = Modifier,
91+
initialIndex: Int = 0,
9192
) {
9293
val scrollState = rememberLazyListState()
94+
95+
// 监听初始索引变化并滚动到指定位置
96+
androidx.compose.runtime.LaunchedEffect(initialIndex) {
97+
if (initialIndex >= 0 && initialIndex < episodes.size) {
98+
scrollState.scrollToItem(initialIndex)
99+
}
100+
}
93101
val scrollRowItemDataList = FnDataConvertor.convertToScrollRowItemDataList(episodes)
94102
val favoriteViewModel: FavoriteViewModel = koinViewModel<FavoriteViewModel>()
95103
val favoriteUiState by favoriteViewModel.uiState.collectAsState()

composeApp/src/commonMain/kotlin/com/jankinwu/fntv/client/ui/screen/TvSeasonDetailScreen.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,16 @@ fun TvEpisodeBody(
495495

496496
item {
497497
logger.i("episodeList: $episodeList")
498+
val currentEpisodeIndex = remember(episodeList, playInfo) {
499+
playInfo?.item?.episodeNumber?.let { episodeNumber ->
500+
episodeList.indexOfFirst { it.episodeNumber == episodeNumber }
501+
} ?: 0
502+
}
498503
EpisodesScrollRow(
499504
episodes = episodeList,
500505
navigator,
501-
modifier = Modifier.padding(horizontal = 16.dp)
506+
modifier = Modifier.padding(horizontal = 16.dp),
507+
initialIndex = if (currentEpisodeIndex != -1) currentEpisodeIndex else 0
502508
)
503509
Spacer(modifier = Modifier.height(24.dp))
504510
}

0 commit comments

Comments
 (0)