@@ -27,13 +27,19 @@ import androidx.compose.material3.Text
2727import androidx.compose.material3.pulltorefresh.PullToRefreshBox
2828import androidx.compose.runtime.Composable
2929import androidx.compose.runtime.getValue
30+ import androidx.compose.runtime.mutableIntStateOf
31+ import androidx.compose.runtime.remember
32+ import androidx.compose.runtime.setValue
3033import androidx.compose.ui.Alignment
3134import androidx.compose.ui.Modifier
3235import androidx.compose.ui.draw.alpha
3336import androidx.compose.ui.draw.clip
3437import androidx.compose.ui.layout.ContentScale
38+ import androidx.compose.ui.layout.onSizeChanged
39+ import androidx.compose.ui.platform.LocalDensity
3540import androidx.compose.ui.text.style.TextOverflow
3641import androidx.compose.ui.tooling.preview.Preview
42+ import androidx.compose.ui.unit.Dp
3743import androidx.compose.ui.unit.dp
3844import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
3945import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -106,6 +112,9 @@ private fun TrendingSection(
106112 }
107113 Spacer (modifier = Modifier .height(4 .dp))
108114
115+ // WORKAROUND: Make all items in pager with different lines of text have the same height
116+ var pagerItemHeight by remember { mutableIntStateOf(0 ) }
117+
109118 val pagerState = rememberPagerState { entries.size }
110119 val flingBehavior = PagerDefaults .flingBehavior(
111120 state = pagerState,
@@ -116,11 +125,24 @@ private fun TrendingSection(
116125 contentPadding = PaddingValues (horizontal = 8 .dp),
117126 pageSize = PageSize .Fixed (type.coverDimension.first.dp),
118127 pageSpacing = 8 .dp,
128+ verticalAlignment = Alignment .Top ,
119129 flingBehavior = flingBehavior,
130+ modifier = Modifier .height(
131+ if (pagerItemHeight > 0 ) {
132+ with (LocalDensity .current) { pagerItemHeight.toDp() }
133+ } else {
134+ Dp .Unspecified
135+ },
136+ ),
120137 ) {
121138 val item = entries[it]
122139 Column (
123- modifier = Modifier .sharedBoundsTransition(SharedTrendingItemKey (item.uuid)),
140+ modifier = Modifier
141+ .sharedBoundsTransition(
142+ SharedTrendingItemKey (item.uuid),
143+ ).onSizeChanged {
144+ if (it.height > pagerItemHeight) pagerItemHeight = it.height
145+ },
124146 ) {
125147 AsyncImage (
126148 model = item.coverUrl,
@@ -131,11 +153,10 @@ private fun TrendingSection(
131153 .clip(MaterialTheme .shapes.small)
132154 .clickable { appNavigator goto AppNavigator .Detail (type, item.uuid) },
133155 )
134- // FIXME: may show 2 lines at most without mess the layout
135156 Text (
136157 text = item.title,
137158 style = MaterialTheme .typography.labelMedium,
138- maxLines = 1 ,
159+ maxLines = 2 ,
139160 overflow = TextOverflow .Ellipsis ,
140161 modifier = Modifier .alpha(.6f ),
141162 )
0 commit comments