(#) Transition.animate* calls should use the provided targetState when defining values
!!! ERROR: Transition.animate* calls should use the provided targetState when defining values
This is an error.
Id
: `UnusedTransitionTargetStateParameter`
Summary
: Transition.animate* calls should use the provided targetState when defining values
Severity
: Error
Category
: Correctness
Platform
: Any
Vendor
: Jetpack Compose
Identifier
: androidx.compose.animation.core
Feedback
: https://issuetracker.google.com/issues/new?component=612128
Min
: Lint 8.0 and 8.1
Compiled
: Lint 8.7+
Artifact
: [androidx.compose.animation:animation-core-android](androidx_compose_animation_animation-core-android.md.html)
Since
: 1.5.0
Affects
: Kotlin and Java files and test sources
Editing
: This check runs on the fly in the IDE editor
Implementation
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/TransitionDetector.kt)
Tests
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/animation/animation-core-lint/src/test/java/androidx/compose/animation/core/lint/TransitionDetectorTest.kt)
Copyright Year
: 2021
Transition.animate* functions provide a target state parameter in the
lambda that will be used to calculate the value for a given state. This
target state parameter in the lambda may or may not be the same as the
actual state, as the animation system occasionally needs to look up
target values for other states to do proper seeking/tooling preview.
Relying on other state than the provided `targetState` could also result
in unnecessary recompositions. Therefore, it is generally considered an
error if this `targetState` parameter is not used.
(##) Example
Here is an example of lint warnings produced by this check:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text
src/foo/test.kt:13:Error: Target state parameter it is not used
[UnusedTransitionTargetStateParameter]
transition.animateFloat { if (foo) 1f else 0f }
-----------------------
src/foo/test.kt:14:Error: Target state parameter it is not used
[UnusedTransitionTargetStateParameter]
transition.animateFloat(targetValueByState = { if (foo) 1f else 0f })
-----------------------
src/foo/test.kt:15:Error: Target state parameter param is not used
[UnusedTransitionTargetStateParameter]
transition.animateFloat { param -> if (foo) 1f else 0f }
-----
src/foo/test.kt:16:Error: Target state parameter param is not used
[UnusedTransitionTargetStateParameter]
transition.animateFloat(targetValueByState = { param -> if (foo) 1f else 0f })
-----
src/foo/test.kt:17:Error: Target state parameter _ is not used
[UnusedTransitionTargetStateParameter]
transition.animateFloat { _ -> if (foo) 1f else 0f }
-
src/foo/test.kt:18:Error: Target state parameter _ is not used
[UnusedTransitionTargetStateParameter]
transition.animateFloat(targetValueByState = { _ -> if (foo) 1f else 0f })
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the source file referenced above:
`src/foo/test.kt`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers
package foo
import androidx.compose.animation.core.*
import androidx.compose.runtime.*
val transition = Transition