mattinger
10/19/2020, 6:53 PMJavier
10/19/2020, 6:55 PMmattinger
10/19/2020, 6:57 PMSergey Y.
10/19/2020, 6:57 PMonClick { if (buttonState == IDLE) proceedClick() }
mattinger
10/19/2020, 6:57 PMJavier
10/19/2020, 6:58 PMmattinger
10/19/2020, 6:58 PMSergey Y.
10/19/2020, 7:03 PM@Composable
fun ProgressButton(state) {
if (state == PROGRESS) {
ProgressStubComposable()
} else {
StandardButton(...)
}
}
Crossfade
composable function@Composable
fun ProgressButton(state) {
Crossfade(state) {
when(it) {
PROGRESS -> ProgressStubComposable()
IDLE -> StandardButton(...)
}
}
}
Adam Powell
10/19/2020, 7:35 PMZach Klippenstein (he/him) [MOD]
10/19/2020, 8:04 PMModifier.semantics(mergeAllDescendants = true) { disabled() }
?mattinger
10/21/2020, 2:14 PMAlwaysEnabledButtonAppearance {
StandardButton(
onClick = {
if (buttonState.value == LoadingState.IDLE) {
buttonState.value = LoadingState.LOADING
GlobalScope.launch {
delay(3000L)
buttonState.value = LoadingState.IDLE
}
}
},
enabled = buttonState.value == LoadingState.IDLE
) {
ButtonLoadingIndicator(buttonState)
Text(text = "Foobar")
}
}
Javier
10/21/2020, 2:21 PMZach Klippenstein (he/him) [MOD]
10/21/2020, 2:24 PMmattinger
10/21/2020, 2:24 PMborder = BorderStroke(
XDSTheme.dimensions.standardButtonBorderWidth,
ButtonConstants.defaultButtonBackgroundColor(
enabled = enabled,
defaultColor = XDSTheme.colors.buttonPrimaryColor,
disabledColor = XDSTheme.colors.buttonDisabledColor
)
)
@Composable
fun StandardLoadingButton(
onClick: suspend () -> Unit,
onClickScope: CoroutineScope = GlobalScope,
modifier: Modifier = Modifier,
buttonState: MutableState<LoadingState> = mutableStateOf(LoadingState.IDLE),
content: @Composable RowScope.() -> Unit
) {
AlwaysEnabledButtonAppearance {
StandardButton(
modifier = modifier,
onClick = {
if (buttonState.value == LoadingState.IDLE) {
buttonState.value = LoadingState.LOADING
onClickScope.launch {
onClick()
buttonState.value = LoadingState.IDLE
}
}
},
enabled = buttonState.value == LoadingState.IDLE
) {
ButtonLoadingIndicator(buttonState)
content()
}
}
}
Javier
10/21/2020, 2:28 PMmattinger
10/21/2020, 2:28 PMborder: BorderStroke? = null,
backgroundColor: Color = ButtonConstants.defaultButtonBackgroundColor(enabled),
contentColor: Color = ButtonConstants.defaultButtonContentColor(
enabled,
contentColorFor(backgroundColor)
)