feat: add selectable, rippleSelectable, rememberRipple

This commit is contained in:
2023-11-10 23:22:00 +08:00
parent 6d033856c2
commit c0713e433c

View File

@@ -25,16 +25,25 @@ package com.highcapable.flexiui.interaction
import androidx.compose.foundation.Indication import androidx.compose.foundation.Indication
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.Dp
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import androidx.compose.foundation.clickable as foundationClickable import androidx.compose.foundation.clickable as foundationClickable
import androidx.compose.foundation.selection.selectable as foundationSelectable
import androidx.compose.foundation.selection.toggleable as foundationToggleable import androidx.compose.foundation.selection.toggleable as foundationToggleable
import androidx.compose.material.ripple.rememberRipple as materialRememberRipple
@Composable
fun rememberRipple(
bounded: Boolean = true,
radius: Dp = Dp.Unspecified,
color: Color = Interaction.rippleColor
) = materialRememberRipple(bounded, radius, color)
@Composable @Composable
fun Modifier.clickable( fun Modifier.clickable(
@@ -56,6 +65,16 @@ fun Modifier.toggleable(
onValueChange: (Boolean) -> Unit onValueChange: (Boolean) -> Unit
) = foundationToggleable(value, interactionSource, indication, enabled, role, onValueChange) ) = foundationToggleable(value, interactionSource, indication, enabled, role, onValueChange)
@Composable
fun Modifier.selectable(
selected: Boolean,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
indication: Indication? = null,
enabled: Boolean = true,
role: Role? = null,
onClick: () -> Unit
) = foundationSelectable(selected, interactionSource, indication, enabled, role, onClick)
@Composable @Composable
fun Modifier.rippleClickable( fun Modifier.rippleClickable(
rippleColor: Color = Interaction.rippleColor, rippleColor: Color = Interaction.rippleColor,
@@ -92,6 +111,24 @@ fun Modifier.rippleToggleable(
onValueChange = onValueChange onValueChange = onValueChange
) )
@Composable
fun Modifier.rippleSelectable(
selected: Boolean,
rippleColor: Color = Interaction.rippleColor,
bounded: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
enabled: Boolean = true,
role: Role? = null,
onClick: () -> Unit
) = selectable(
selected = selected,
interactionSource = interactionSource,
indication = rememberRipple(bounded = bounded, color = rippleColor),
enabled = enabled,
role = role,
onClick = onClick
)
object Interaction { object Interaction {
val rippleColor: Color val rippleColor: Color
@Composable @Composable