Import DropDownPref

This commit is contained in:
tarsin committed 2023-06-05 00:31:56 +08:00
1 parent 6f488c1d00
commit 8f1f76c3d1
1 file changed
+80
@@ -0,0 +1,80 @@
package com.jamal.composeprefs3.ui.prefs
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
@Composable
fun DropDownPref(
key: String,
title: String,
modifier: Modifier = Modifier,
summary: String? = null,
defaultValue: String? = null,
onValueChange: ((String) -> Unit)? = null,
useSelectedAsSummary: Boolean = false,
dropdownBackgroundColor: Color? = null,
textColor: Color = MaterialTheme.colorScheme.onBackground,
enabled: Boolean = true,
entries: Map<String, String> = mapOf(),
) {
var expanded by rememberSaveable { mutableStateOf(false) }
fun edit(item: Map.Entry<String, String>) {
expanded = false
onValueChange?.invoke(item.key)
}
Column {
TextPref(
title = title,
modifier = modifier,
summary = when {
useSelectedAsSummary && defaultValue != null -> entries[defaultValue]
useSelectedAsSummary && defaultValue == null -> "Not Set"
else -> summary
},
textColor = textColor,
enabled = enabled,
onClick = {
expanded = true
},
)
Box(
modifier = Modifier.padding(start = 16.dp),
) {
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = if (dropdownBackgroundColor != null) Modifier.background(dropdownBackgroundColor) else Modifier,
) {
entries.forEach { item ->
DropdownMenuItem(
onClick = {
edit(item)
},
text = {
Text(
text = item.value,
style = MaterialTheme.typography.bodyLarge,
)
},
)
}
}
}
}
}