Make action sheet pickers scrollable

This commit is contained in:
Xisheng-Zhao
2026-06-19 20:39:43 +08:00
parent 014e4e7761
commit 45412e5fdd
@@ -1058,6 +1058,10 @@ fun MulticaCupertinoActionSheet(
)
},
message = {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
if (!message.isNullOrBlank()) {
Text(
text = message,
@@ -1065,22 +1069,59 @@ fun MulticaCupertinoActionSheet(
color = MulticaColors.TextTertiary,
textAlign = TextAlign.Center,
)
Spacer(modifier = Modifier.height(8.dp))
}
},
buttons = {
items.forEach { item ->
action(
LazyColumn(
modifier = Modifier
.fillMaxWidth()
.heightIn(max = 420.dp),
) {
items(items.size) { index ->
val item = items[index]
MulticaCupertinoActionSheetItemContent(
item = item,
onClick = {
if (!item.enabled) return@MulticaCupertinoActionSheetItemContent
performMulticaTapFeedback(haptic)
item.onClick()
onDismissRequest()
},
style = if (item.destructive) AlertActionStyle.Destructive else AlertActionStyle.Default,
enabled = item.enabled,
)
}
}
}
},
buttons = {
if (!cancelText.isNullOrBlank()) {
action(
onClick = {
performMulticaTapFeedback(haptic)
onDismissRequest()
},
style = AlertActionStyle.Cancel,
enabled = true,
) {
Text(
text = cancelText,
style = MaterialTheme.typography.bodyMedium.copy(fontSize = 15.sp, fontWeight = FontWeight.SemiBold),
color = MulticaColors.Accent,
)
}
}
},
)
}
@Composable
private fun MulticaCupertinoActionSheetItemContent(
item: MulticaCupertinoActionSheetItem,
onClick: () -> Unit,
) {
Row(
modifier = Modifier
.fillMaxWidth()
.clickable(enabled = item.enabled, onClick = onClick)
.padding(horizontal = 12.dp, vertical = 11.dp)
.semantics(mergeDescendants = true) {
contentDescription = "Multica Cupertino Action Sheet ${item.contentDescription ?: item.title}"
},
@@ -1146,26 +1187,6 @@ fun MulticaCupertinoActionSheet(
)
}
}
}
}
if (!cancelText.isNullOrBlank()) {
action(
onClick = {
performMulticaTapFeedback(haptic)
onDismissRequest()
},
style = AlertActionStyle.Cancel,
enabled = true,
) {
Text(
text = cancelText,
style = MaterialTheme.typography.bodyMedium.copy(fontSize = 15.sp, fontWeight = FontWeight.SemiBold),
color = MulticaColors.Accent,
)
}
}
},
)
}
@Composable