It can definitely be achieved, that's for sure. One method that I can think of currently is something like this:
Create a single Composable that accepts a state (shown/hidden) and any other parameters you require. Inside that, create a state-holder for the visibility of each dial item, and trigger the animation on them at certain millis apart from each other.
Something like this
@Composable
fun SpeedDial(expanded: Boolean){
LaunchedEffect(expanded){
handleAnimation()
}
val visibilityList = remember { mutableStateListOf<Boolean>(/* List Of Booleans */) }
AnimatedVisibility(visible == visibilityList(0)){
Item1() // Visible only if the first item in list is visible
}
// Copy-paste for other items
suspend fun handleAnimation() {
visibilityList.forEachIndexed { index, visibility ->
visibilityList.set(index, expanded)
delay(150) // Alter per-requirement
}
}
}
This should achieve the effect without lag. Try it out.