SuperDropdown
SuperDropdown is a dropdown menu component in Miuix that provides a title, summary, and a list of dropdown options. It supports click interaction and is commonly used in option settings and list selections.
WARNING
SuperDropdown must be used within a Scaffold component!
Import
kotlin
import top.yukonga.miuix.kmp.extra.SuperDropdownBasic Usage
The SuperDropdown component provides basic dropdown menu functionality:
kotlin
var selectedIndex by remember { mutableStateOf(0) }
val options = listOf("Option 1", "Option 2", "Option 3")
Scaffold {
SuperDropdown(
title = "Dropdown Menu",
items = options,
selectedIndex = selectedIndex,
onSelectedIndexChange = { selectedIndex = it }
)
}Dropdown with Summary
kotlin
var selectedIndex by remember { mutableStateOf(0) }
val options = listOf("中文", "English", "日本語")
Scaffold {
SuperDropdown(
title = "Language Settings",
summary = "Choose your preferred language",
items = options,
selectedIndex = selectedIndex,
onSelectedIndexChange = { selectedIndex = it }
)
}Component States
Disabled State
kotlin
SuperDropdown(
title = "Disabled Dropdown",
summary = "This dropdown menu is currently unavailable",
items = listOf("Option 1"),
selectedIndex = 0,
onSelectedIndexChange = {},
enabled = false
)Properties
SuperDropdown Properties
| Property Name | Type | Description | Default Value | Required |
|---|---|---|---|---|
| items | List<String> | List of dropdown options | - | Yes |
| selectedIndex | Int | Index of currently selected item | - | Yes |
| title | String | Title of the dropdown menu | - | Yes |
| titleColor | BasicComponentColors | Title text color configuration | BasicComponentDefaults.titleColor() | No |
| summary | String? | Summary description of dropdown | null | No |
| summaryColor | BasicComponentColors | Summary text color configuration | BasicComponentDefaults.summaryColor() | No |
| dropdownColors | DropdownColors | Color configuration for dropdown | DropdownDefaults.dropdownColors() | No |
| leftAction | @Composable (() -> Unit)? | Custom left content | null | No |
| modifier | Modifier | Modifier applied to the component | Modifier | No |
| insideMargin | PaddingValues | Internal content padding | BasicComponentDefaults.InsideMargin | No |
| maxHeight | Dp? | Maximum height of dropdown menu | null | No |
| enabled | Boolean | Whether component is interactive | true | No |
| showValue | Boolean | Whether to show selected value | true | No |
| onClick | (() -> Unit)? | Additional callback on click | null | No |
| onSelectedIndexChange | ((Int) -> Unit)? | Callback when selection changes | - | Yes |
DropdownColors Properties
| Property Name | Type | Description |
|---|---|---|
| contentColor | Color | Option text color |
| containerColor | Color | Option background color |
| selectedContentColor | Color | Selected item text color |
| selectedContainerColor | Color | Selected item background color |
Advanced Usage
Custom Colors
kotlin
var selectedIndex by remember { mutableStateOf(0) }
val options = listOf("Red", "Green", "Blue")
Scaffold {
SuperDropdown(
title = "Custom Colors",
items = options,
selectedIndex = selectedIndex,
onSelectedIndexChange = { selectedIndex = it },
dropdownColors = DropdownDefaults.dropdownColors(
selectedContentColor = Color.Red,
selectedContainerColor = Color.Red.copy(alpha = 0.2f)
)
)
}Limited Dropdown Height
kotlin
var selectedIndex by remember { mutableStateOf(0) }
val options = List(20) { "Option ${it + 1}" }
Scaffold {
SuperDropdown(
title = "Limited Height",
items = options,
selectedIndex = selectedIndex,
onSelectedIndexChange = { selectedIndex = it },
maxHeight = 200.dp // Limit dropdown menu maximum height to 200dp
)
}Hide Selected Value Display
kotlin
var selectedIndex by remember { mutableStateOf(0) }
val options = listOf("Option 1", "Option 2", "Option 3")
Scaffold {
SuperDropdown(
title = "Hide Selected Value",
items = options,
selectedIndex = selectedIndex,
onSelectedIndexChange = { selectedIndex = it },
showValue = false // Hide selected value display
)
}Use with Dialog
kotlin
var showDialog = remember { mutableStateOf(false) }
var selectedIndex by remember { mutableStateOf(0) }
val themes = listOf("Light Mode", "Dark Mode", "System Default")
Scaffold {
SuperArrow(
title = "Theme Settings",
onClick = { showDialog.value = true },
holdDownState = showDialog.value
)
SuperDialog(
title = "Theme Settings",
show = showDialog,
onDismissRequest = { showDialog.value = false }
) {
Card {
SuperDropdown(
title = "Theme Selection",
summary = "Choose your preferred theme appearance",
items = themes,
selectedIndex = selectedIndex,
onSelectedIndexChange = { selectedIndex = it }
)
}
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.padding(top = 12.dp)
) {
TextButton(
text = "Cancel",
onClick = { showDialog.value = false },
modifier = Modifier.weight(1f)
)
Spacer(Modifier.width(16.dp))
TextButton(
text = "Confirm",
onClick = { showDialog.value = false },
modifier = Modifier.weight(1f),
colors = ButtonDefaults.textButtonColorsPrimary()
)
}
}
}