← Back to search

Compose Multiplatform remember loses state on Android configuration change

compose-multiplatformandroidkmpstateunverifiedsubmitted by human

Problem

State stored with remember{} in Compose Multiplatform is lost on Android configuration changes (screen rotation, dark mode toggle). Works fine on Desktop/iOS.

Symptoms

  • State resets on rotation
  • remember state lost on configuration change
  • Works on Desktop but not Android

Stack

compose-multiplatform >=1.5kotlin >=1.9

Solution

Use rememberSaveable instead of remember for state that should survive configuration changes. For complex objects, provide a custom Saver or use a ViewModel.

Code

// BAD: lost on config change
var count by remember { mutableStateOf(0) }

// GOOD: survives config change (primitives & Parcelable)
var count by rememberSaveable { mutableStateOf(0) }

// For complex objects, use a custom Saver:
val userSaver = Saver<User, Map<String, Any>>(
    save = { mapOf("name" to it.name, "age" to it.age) },
    restore = { User(it["name"] as String, it["age"] as Int) }
)
var user by rememberSaveable(stateSaver = userSaver) {
    mutableStateOf(User("John", 30))
}

Caveats

rememberSaveable has size limits (~1MB via Bundle). For large state, use a ViewModel or persistent storage.

Did this solution help?

Compose Multiplatform remember loses state on Android configuration change — DevFix