Monday, 6 December 2021

Jetpack compose button action onClick leak

we've encountered a problem with Jetpack Compose button actions leaking. We provide a class with resources (e.g strings, colors, and BUTTON ACTIONS):

data class CameraOnBoardingComposeViewResources(val title: String, val buttonTitle: String, val buttonAction: () -> Unit)

This data class is created in the fragment like so:

val resources = CameraOnBoardingComposeViewResources(
    "Title", "ButtonTitle"
) { navigate() }

And in our composable we use those resources like so:

@Composable
fun composeOnBoardingView(resources: CameraOnBoardingComposeViewResources) {
    Surface(
        shape = RoundedCornerShape(4.dp),
        color = colorResource(R.color.idenfyMainColorV2),
        modifier = Modifier
            .height(42.dp)
            .padding(start = 16.dp, end = 16.dp)
            .clickable(onClick = resources.buttonAction)
            .fillMaxWidth()
    )
}

The problem is that buttonAction leaks. How can we avoid this leak, should we somehow dispose of it, or do we need to change this architecture a bit?



from Jetpack compose button action onClick leak

No comments:

Post a Comment