(#) Creating a MutableState object with a mutable collection type
!!! WARNING: Creating a MutableState object with a mutable collection type
This is a warning.
Id
: `MutableCollectionMutableState`
Summary
: Creating a MutableState object with a mutable collection type
Severity
: Warning
Category
: Correctness
Platform
: Any
Vendor
: Jetpack Compose
Identifier
: androidx.compose.runtime
Feedback
: https://issuetracker.google.com/issues/new?component=612128
Min
: Lint 8.0 and 8.1
Compiled
: Lint 8.0 and 8.1
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/MutableCollectionMutableStateDetector.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/MutableCollectionMutableStateDetectorTest.kt)
Copyright Year
: 2021
Writes to mutable collections inside a MutableState will not cause a
recomposition - only writes to the MutableState itself will. In most
cases you should either use a read-only collection (such as List or Map)
and assign a new instance to the MutableState when your data changes, or
you can use an snapshot-backed collection such as SnapshotStateList or
SnapshotStateMap which will correctly cause a recomposition when their
contents are modified.
(##) Example
Here is an example of lint warnings produced by this check:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text
src/test/test.kt:12:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val listProperty = mutableStateOf(list)
--------------
src/test/test.kt:14:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val setFunction = mutableStateOf(mutableSetOf(1))
--------------
src/test/test.kt:15:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val setProperty = mutableStateOf(set)
--------------
src/test/test.kt:17:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val mapFunction = mutableStateOf(mutableMapOf(1 to 1))
--------------
src/test/test.kt:18:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val mapProperty = mutableStateOf(map)
--------------
src/test/test.kt:20:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val collectionProperty = mutableStateOf(collection)
--------------
src/test/test.kt:28:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val listParameter = mutableStateOf(listParam)
--------------
src/test/test.kt:29:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val setParameter = mutableStateOf(setParam)
--------------
src/test/test.kt:30:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val mapParameter = mutableStateOf(mapParam)
--------------
src/test/test.kt:31:Warning: Creating a MutableState object with a
mutable collection type [MutableCollectionMutableState]
val collectionProperty = mutableStateOf(collectionParam)
--------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the source file referenced above:
`src/test/test.kt`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers
package test
import androidx.compose.runtime.*
val list = mutableListOf(1)
val set = mutableSetOf(1)
val map = mutableMapOf(1 to 1)
val collection: MutableCollection