One Off the Slack: How Do We Have Immutable State?
Dmitry Suzdalev asked:
is there some kind of
immutableStateOf(value)
?
val state = when (orientation) {
Orientation.Landscape -> animateDpAsState(32.dp)
Orientation.Portrait -> immutableStateOf(16.dp)
}
I could use
mutableStateOf(16.dp)
of course, just thought maybe something more lightweight exists.
Google’s Adam Powell was slightly mystified:
why would you use a constant argument to
animateDpAsState
? 🤔
Dmitry then realized his trimmed-down example had a bug:
ah, actually there’s an if there, sorry:
animateDpAsState(if (someFlag) 0.dp else 32.dp)
. otherwise the question is still valid.
Adam then offered:
I’d probably fold it into the
when
with something like
animateDpAsState(
when (orientation) {
Landscape -> if (someFlag) 0.dp else 32.dp
Portrait -> 16.dp
}
)
and as a bonus you can get animation between those two for things like window resizing changing the orientation
but no, there’s no
immutableStateOf
and you should never need one. Either use the constant directly, or if you’re making a late-binding decision and you want a snapshot read to occur more deeply in your UI somewhere, use a() -> T
lambda instead of trying to construct aState<T>
around something
Read the original thread in the kotlinlang Slack workspace. Not a member? Join that Slack workspace here!