Skip to content

Commit be506b5

Browse files
committed
fix: show up to 2 lines of text for entries in home page
1 parent 9f93f53 commit be506b5

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

app/src/main/kotlin/day/vitayuzu/neodb/ui/page/home/HomeScreen.kt

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,19 @@ import androidx.compose.material3.Text
2727
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
2828
import androidx.compose.runtime.Composable
2929
import androidx.compose.runtime.getValue
30+
import androidx.compose.runtime.mutableIntStateOf
31+
import androidx.compose.runtime.remember
32+
import androidx.compose.runtime.setValue
3033
import androidx.compose.ui.Alignment
3134
import androidx.compose.ui.Modifier
3235
import androidx.compose.ui.draw.alpha
3336
import androidx.compose.ui.draw.clip
3437
import androidx.compose.ui.layout.ContentScale
38+
import androidx.compose.ui.layout.onSizeChanged
39+
import androidx.compose.ui.platform.LocalDensity
3540
import androidx.compose.ui.text.style.TextOverflow
3641
import androidx.compose.ui.tooling.preview.Preview
42+
import androidx.compose.ui.unit.Dp
3743
import androidx.compose.ui.unit.dp
3844
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
3945
import 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

Comments
 (0)