Есть ли способ повторно использовать «общие» вещи, такие как 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(
                        ...
                    )
                }
            }
        }
    }
}

Я ищу способ переместить это в общую папку, а не дублировать код.

Любая помощь будет принята с благодарностью; заранее спасибо.

0 ответов

Другие вопросы по тегам