Issue
I have a composable function with a textfield and a button
@Composable
private fun ButtonsColumn(
modifier: Modifier = Modifier,
// enum class DataEntryInputState
dataEntryInputState: DataEntryInputState = DataEntryInputState.Default,
onClickParam: () -> Unit
) {
// enum class ButtonType that change content of the button
var buttonState by remember { mutableStateOf(ButtonType.Text) }
Column(modifier = modifier) {
DataEntryInputLarge(
...
// custom composable
...
)
ButtonPrimary(
modifier = Modifier
.fillMaxWidth()
.clickable {
buttonState = ButtonType.Loading
},
text = "Login",
enabled = textFieldState,
type = buttonState,
onClick = onClickParam
)
}
}
I want to update buttonState when onClick finish, something like:
onClickParam: () -> Boolean
...
onClick = {
if(!onClickParam){
buttonState = DataEntryInputState.Default
}
}
It means that when the lambda function finishes if it's false update the content of the button according to what I already have. I don't sure if it's possible or if it's another way to do that.
Solution
Just accept something for the lambda, for example, this updates a boolean value based on the current value
fun CustomComposable(
onClick: (Boolean) -> Boolean
){
var myBoolean by mutableStateOf (false)
myBoolean = onClick(myBoolean)
}
Now, the onClick parameter can be implemented something like this:
{ receivedBoolean -> //You can also use 'it' keyword to access this
return !receivedBoolean //Just return the complimentary boolean
}
When implemented like this, your Composable is passing in a Boolean to the onClick which is returning the complimentary boolean, and hence, when this onClick is complete, thr value of myBoolean within the Composable will be flipped. This is achieved by simply adding a getter, by adding a value in the parenthesis of onClick, and a setter, implemented by returning a Boolean instead of Unit. This is just an example. Implement it the way you want. The method will remain the same.
Answered By - MARSK
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.