Skip to content

Instantly share code, notes, and snippets.

@fabioCollini
Created September 19, 2021 17:20
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fabioCollini/ec4de5d58a598b9b258eb60976c32fec to your computer and use it in GitHub Desktop.
Save fabioCollini/ec4de5d58a598b9b258eb60976c32fec to your computer and use it in GitHub Desktop.
class SavedStateHandleDelegate<T>(
private val savedStateHandle: SavedStateHandle,
private val key: String,
defaultValue: T,
initializer: (valueLoadedFromState: T?, setter: (T) -> Unit) -> Unit
) : ReadWriteProperty<Any, T> {
private val state: MutableState<T>
init {
val savedValue = savedStateHandle.get<T>(key)
state = mutableStateOf(
savedValue ?: defaultValue
)
initializer(savedValue, ::updateValue)
}
override fun getValue(thisRef: Any, property: KProperty<*>) = state.value
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
updateValue(value)
}
private fun updateValue(value: T) {
state.value = value
savedStateHandle.set(key, value)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment