(#) produceState calls should assign `value` inside the producer lambda
!!! ERROR: produceState calls should assign `value` inside the producer lambda
This is an error.
Id
: `ProduceStateDoesNotAssignValue`
Summary
: produceState calls should assign `value` inside the producer lambda
Severity
: Error
Category
: Correctness
Platform
: Any
Vendor
: Jetpack Compose
Identifier
: androidx.compose.runtime
Feedback
: https://issuetracker.google.com/issues/new?component=612128
Min
: Lint 8.7+
Compiled
: Lint 8.7+
Artifact
: [androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-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/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ProduceStateDetector.kt)
Tests
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/runtime/runtime-lint/src/test/java/androidx/compose/runtime/lint/ProduceStateDetectorTest.kt)
Copyright Year
: 2021
produceState returns an observable State using values assigned inside
the producer lambda. If the lambda never assigns (i.e `value = foo`),
then the State will never change. Make sure to assign a value when the
source you are producing values from changes / emits a new value. For
sample usage see the produceState documentation.
(##) Example
Here is an example of lint warnings produced by this check:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text
src/androidx/compose/runtime/foo/test.kt:8:Error: produceState calls
should assign value inside the producer lambda
[ProduceStateDoesNotAssignValue]
produceState(true, true) {
------------
src/androidx/compose/runtime/foo/test.kt:12:Error: produceState calls
should assign value inside the producer lambda
[ProduceStateDoesNotAssignValue]
produceState(true, true) {
------------
src/androidx/compose/runtime/foo/test.kt:17:Error: produceState calls
should assign value inside the producer lambda
[ProduceStateDoesNotAssignValue]
produceState(true, true) {
------------
src/androidx/compose/runtime/foo/test.kt:21:Error: produceState calls
should assign value inside the producer lambda
[ProduceStateDoesNotAssignValue]
produceState(true, true) {
------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the source file referenced above:
`src/androidx/compose/runtime/foo/test.kt`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers
package androidx.compose.runtime.foo
import androidx.compose.runtime.*
@Composable
fun Test() {
produceState(true, true) {
// Reading, not assigning the value, so this should be an error
val foo = value
}
produceState(true, true) {
// This method is a member of ProduceStateScope, so we know that it isn't
// going to assign value for us
awaitDispose { }
}
produceState(true, true) {
// Receiver type of State, so assigning value is not possible
doSomethingWithState()
}
produceState(true, true) {
// Parameter type of State, so assigning value is not possible
doSomethingElseWithState(this)
}
}
fun