refactor: make content optional

This commit is contained in:
2023-12-01 10:55:25 +08:00
parent 396dc05142
commit a6f92bf1fc
3 changed files with 26 additions and 17 deletions

View File

@@ -32,8 +32,9 @@ import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
@@ -85,7 +86,7 @@ fun CheckBox(
style: CheckBoxStyle = CheckBox.style, style: CheckBoxStyle = CheckBox.style,
enabled: Boolean = true, enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit = {} content: @Composable (RowScope.() -> Unit)? = null
) { ) {
val hovered by interactionSource.collectIsHoveredAsState() val hovered by interactionSource.collectIsHoveredAsState()
val pressed by interactionSource.collectIsPressedAsState() val pressed by interactionSource.collectIsPressedAsState()
@@ -120,10 +121,12 @@ fun CheckBox(
tint = colors.contentColor tint = colors.contentColor
) )
} }
Box( content?.also { content ->
modifier = Modifier.padding(start = style.contentSpacing) Row(modifier = Modifier.clickable(enabled = enabled) { onCheckedChange(!checked) }) {
.clickable(enabled = enabled) { onCheckedChange(!checked) } Box(modifier = Modifier.width(style.contentSpacing))
) { content() } content()
}
}
} }
} }

View File

@@ -33,8 +33,9 @@ import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.ReadOnlyComposable
@@ -84,7 +85,7 @@ fun RadioButton(
style: RadioButtonStyle = RadioButton.style, style: RadioButtonStyle = RadioButton.style,
enabled: Boolean = true, enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit = {} content: @Composable (RowScope.() -> Unit)? = null
) { ) {
val contentDiameter = style.contentRadius * 2 val contentDiameter = style.contentRadius * 2
val strokeDiameter = style.strokeRadius * 2 val strokeDiameter = style.strokeRadius * 2
@@ -115,10 +116,12 @@ fun RadioButton(
.background(colors.contentColor, style.shape) .background(colors.contentColor, style.shape)
) )
} }
Box( content?.also { content ->
modifier = Modifier.padding(start = style.contentSpacing) Row(modifier = Modifier.clickable(enabled = enabled, onClick = onClick)) {
.clickable(enabled = enabled, onClick = onClick) Box(modifier = Modifier.width(style.contentSpacing))
) { content() } content()
}
}
} }
} }

View File

@@ -39,6 +39,7 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.ReadOnlyComposable
@@ -98,7 +99,7 @@ fun Switch(
style: SwitchStyle = Switch.style, style: SwitchStyle = Switch.style,
enabled: Boolean = true, enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit = {} content: @Composable (RowScope.() -> Unit)? = null
) { ) {
val thumbDiameter = style.thumbRadius * 2 val thumbDiameter = style.thumbRadius * 2
val maxOffsetX = with(LocalDensity.current) { (style.trackWidth - thumbDiameter - style.padding.horizontal).toPx() } val maxOffsetX = with(LocalDensity.current) { (style.trackWidth - thumbDiameter - style.padding.horizontal).toPx() }
@@ -183,10 +184,12 @@ fun Switch(
) )
} }
Row(modifier = Modifier.status(enabled).then(modifier)) { Row(modifier = Modifier.status(enabled).then(modifier)) {
Box( content?.also { content ->
modifier = Modifier.padding(end = style.contentSpacing) Row(modifier = Modifier.clickable(enabled = enabled) { onCheckedChange(!checked) }) {
.clickable(enabled = enabled) { onCheckedChange(!checked) } content()
) { content() } Box(modifier = Modifier.width(style.contentSpacing))
}
}
Track { Thumb() } Track { Thumb() }
} }
} }