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

View File

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

View File

@@ -39,6 +39,7 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.ReadOnlyComposable
@@ -98,7 +99,7 @@ fun Switch(
style: SwitchStyle = Switch.style,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit = {}
content: @Composable (RowScope.() -> Unit)? = null
) {
val thumbDiameter = style.thumbRadius * 2
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)) {
Box(
modifier = Modifier.padding(end = style.contentSpacing)
.clickable(enabled = enabled) { onCheckedChange(!checked) }
) { content() }
content?.also { content ->
Row(modifier = Modifier.clickable(enabled = enabled) { onCheckedChange(!checked) }) {
content()
Box(modifier = Modifier.width(style.contentSpacing))
}
}
Track { Thumb() }
}
}