arch-toolkit

State Handle migration in rc18

Arch Toolkit no longer builds or publishes State Handle starting with 2.0.0-rc18. Use event-observer-state:3.0.0 from Arch Event Observer. Existing rc17 artifacts remain historical releases; rc18 does not publish a compatibility shim or relocation POM for their coordinates.

Before After
io.github.matheus-corregiari:state-handle:2.0.0-rc17 io.github.matheus-corregiari:event-observer-state:3.0.0
br.com.arch.toolkit.stateHandle br.com.arch.toolkit.eventObserver.state
SavableObject inheritance @Serializable models or an explicit serializer
Native objects with a JSON fallback JSON saved under one key

Replace dependencies and imports explicitly. Align Event Observer core, Compose and State to the same Event Observer version, independent of Splinter.

commonMain.dependencies {
    implementation("io.github.matheus-corregiari:event-observer-state:3.0.0")
}

Apply Kotlin serialization in each module declaring serializable models. Remove SavableObject inheritance. Use the holder APIs from br.com.arch.toolkit.eventObserver.state in applications adopting State Handle. The current showcase owns its GitHub UI state independently in its ViewModel.

Saved state and loading

Old native/shadow snapshots are not decoded by the new library. Choose a new key when starting fresh instead of interpreting an old native snapshot as JSON. Applications requiring continuity must convert old values before initializing the new holder.

flow() exposes a stable state flow; load starts a new operation and returns a job. Payloads restore as success; loading and errors are transient. Defaults do not replace restored values. Use a SavedStateHandle from a restoring owner; simply constructing a handle does not add platform restoration.

Event Observer 3.0 privately owns each holder’s saved-state key. Update active holders with set or setAsync; writing directly to SavedStateHandle[key] no longer updates them. Keep one active holder per key. Existing JSON payloads remain readable. The Compose builder API was replaced with DataResultContent for snapshots and ComposableDataResult for flows; animations and side effects require explicit configuration.

See the upstream migration guide for API differences and platform limitations.