Skip to content

Commit 8d825fe

Browse files
committed
fix: clickableAlpha not triggering click event
1 parent c02fba4 commit 8d825fe

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

app/src/main/java/to/bitkit/ui/components/Button.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import androidx.compose.ui.text.style.TextOverflow
3030
import androidx.compose.ui.tooling.preview.Preview
3131
import androidx.compose.ui.unit.Dp
3232
import androidx.compose.ui.unit.dp
33-
import to.bitkit.ui.shared.modifiers.clickableAlpha
33+
import to.bitkit.ui.shared.modifiers.alphaFeedback
3434
import to.bitkit.ui.shared.util.primaryButtonStyle
3535
import to.bitkit.ui.theme.AppButtonDefaults
3636
import to.bitkit.ui.theme.AppThemeSurface
@@ -67,7 +67,7 @@ fun PrimaryButton(
6767
val buttonShape = MaterialTheme.shapes.large
6868

6969
Button(
70-
onClick = {},
70+
onClick = onClick,
7171
enabled = enabled && !isLoading,
7272
colors = AppButtonDefaults.primaryColors.copy(
7373
containerColor = Color.Transparent,
@@ -83,7 +83,7 @@ fun PrimaryButton(
8383
shape = buttonShape,
8484
primaryColor = color
8585
)
86-
.clickableAlpha { onClick() }
86+
.alphaFeedback(enabled = enabled && !isLoading)
8787
.then(modifier)
8888
) {
8989
if (isLoading) {

app/src/main/java/to/bitkit/ui/shared/modifiers/ClickableAlpha.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@ package to.bitkit.ui.shared.modifiers
22

33
import androidx.compose.animation.core.Animatable
44
import androidx.compose.foundation.gestures.detectTapGestures
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.runtime.remember
7+
import androidx.compose.runtime.rememberCoroutineScope
58
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.graphics.graphicsLayer
610
import androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode
11+
import androidx.compose.ui.input.pointer.pointerInput
712
import androidx.compose.ui.layout.Measurable
813
import androidx.compose.ui.layout.MeasureResult
914
import androidx.compose.ui.layout.MeasureScope
@@ -101,3 +106,33 @@ private class ClickableAlphaNode(
101106
}
102107
}
103108
}
109+
110+
/**
111+
* Applies alpha animation feedback on press without consuming click events.
112+
* This allows the Button's onClick to work while providing full-area visual feedback.
113+
*/
114+
@Composable
115+
fun Modifier.alphaFeedback(
116+
pressedAlpha: Float = 0.7f,
117+
enabled: Boolean = true,
118+
): Modifier = if (enabled) {
119+
val animatable = remember { Animatable(1f) }
120+
val scope = rememberCoroutineScope()
121+
122+
this
123+
.pointerInput(Unit) {
124+
detectTapGestures(
125+
onPress = {
126+
scope.launch { animatable.animateTo(pressedAlpha) }
127+
tryAwaitRelease()
128+
scope.launch { animatable.animateTo(1f) }
129+
},
130+
onTap = null // Don't consume tap - let Button handle it
131+
)
132+
}
133+
.graphicsLayer {
134+
alpha = animatable.value
135+
}
136+
} else {
137+
this
138+
}

0 commit comments

Comments
 (0)