[ContextualFlowRow] is a specialized version of the [FlowRow] layout.
ContextualFlowRowMaxLineDynamicSeeMore
@OptIn(ExperimentalLayoutApi::class)
@Composable
fun ContextualFlowRowMaxLineDynamicSeeMore() {
val totalCount = 300
var maxLines by remember { mutableStateOf(2) }
Text(
modifier =
Modifier.fillMaxWidth(1f).padding(20.dp).wrapContentHeight(align = Alignment.Top),
text =
"ContextualFlowRow (based on Subcompose)" +
" is great for Large Items & +N dynamic labels",
fontWeight = FontWeight.Bold,
)
val moreOrCollapseIndicator =
@Composable { scope: ContextualFlowRowOverflowScope ->
val remainingItems = totalCount - scope.shownItemCount
DynamicSeeMore(isHorizontal = true, remainingItems = remainingItems) {
if (remainingItems == 0) {
maxLines = 2
} else {
maxLines += 5
}
}
}
ContextualFlowRow(
modifier =
Modifier.fillMaxWidth(1f).padding(20.dp).wrapContentHeight(align = Alignment.Top),
horizontalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(20.dp),
maxLines = maxLines,
overflow =
ContextualFlowRowOverflow.expandOrCollapseIndicator(
minRowsToShowCollapse = 4,
expandIndicator = moreOrCollapseIndicator,
collapseIndicator = moreOrCollapseIndicator,
),
itemCount = totalCount,
) {
Box(
Modifier.align(Alignment.CenterVertically)
.width(50.dp)
.height(50.dp)
.background(Color.Green)
) {
Text(
text = it.toString(),
fontSize = 18.sp,
modifier = Modifier.padding(3.dp).align(Alignment.Center),
)
}
}
}