Есть ли способ повторно использовать «общие» вещи, такие как DropdownMenu, в многоплатформенном проекте Compose?
Для рабочего стола DropdownMenu предоставляется Gradle: org.jetbrains.compose.material:material-desktop:1.0.1-rc2; для Android это в Gradle: androidx.compose.material:material:1.1.0-beta04@aar
Я бы подумал, что будет общий API, который оба реализуют.
Я знаю, что могу определить свой собственный интерфейс/адаптер, а затем подключить конкретную версию устройства, но мне интересно, есть ли умный идиоматический способ Kotlin сделать это.
Я пытался использовать «ожидание» и «фактическое», но смог понять синтаксис. (DropdownMenu не имеет простой подписи, как в примерах ожидаемого/фактического использования).
Вот пример меню, которое я использую... версии Android и Desktop выглядят одинаково:
// TODO is there way that this can be moved to Common
@Composable
fun BellSoundMenu(model: SessionViewModel, files: List<SoundFile>) {
val selectedIndex = remember { mutableStateOf(0) }
DropdownMenu(
expanded = model.isBellMenuExpanded.value,
...
) {
files.forEachIndexed { index, sound: SoundFile ->
DropdownMenuItem(onClick = {
selectedIndex.value = index
...
}) {
Row {
val isSelected = sound == model.getBellFile()
Icon(
...
)
Text(
...
)
}
}
}
}
}
Я ищу способ переместить это в общую папку, а не дублировать код.
Любая помощь будет принята с благодарностью; заранее спасибо.