Skip to content

Instantly share code, notes, and snippets.

@marcellogalhardo
Last active January 10, 2023 15:44
Show Gist options
  • Save marcellogalhardo/08dd65ebb1b45114a112ede1da8a1f1c to your computer and use it in GitHub Desktop.
Save marcellogalhardo/08dd65ebb1b45114a112ede1da8a1f1c to your computer and use it in GitHub Desktop.
Helper functions to manually create your own SavedStateHandle with ease.
fun ComponentActivity.lazySavedStateHandle(
key: String = this::class.java.canonicalName,
defaultState: Bundle? = intent?.extras,
): Lazy<SavedStateHandle> = lazy(LazyThreadSafetyMode.NONE) {
SavedStateHandle(savedStateRegistry, key, defaultState)
}
fun Fragment.lazySavedStateHandle(
key: String = this::class.java.canonicalName,
defaultState: Bundle? = arguments,
): Lazy<SavedStateHandle> = lazy(LazyThreadSafetyMode.NONE) {
SavedStateHandle(savedStateRegistry, key, defaultState)
}
private fun SavedStateHandle(
savedStateRegistry: SavedStateRegistry,
key: String,
defaultState: Bundle?,
): SavedStateHandle {
val restoredState = savedStateRegistry.consumeRestoredStateForKey(key)
val handle = SavedStateHandle.createHandle(restoredState, defaultState)
savedStateRegistry.registerSavedStateProvider(key, handle.savedStateProvider())
return handle
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment