@@ -6,8 +6,10 @@ import androidx.compose.runtime.Composable
66import androidx.compose.runtime.DisposableEffect
77import androidx.compose.runtime.LaunchedEffect
88import androidx.compose.runtime.MutableState
9+ import androidx.compose.runtime.getValue
910import androidx.compose.runtime.mutableStateOf
1011import androidx.compose.runtime.remember
12+ import androidx.compose.runtime.rememberUpdatedState
1113import androidx.compose.runtime.snapshotFlow
1214import androidx.compose.ui.platform.LocalContext
1315import androidx.core.content.edit
@@ -88,22 +90,24 @@ private fun <T> rememberSharedPreference(
8890 val currentValue = remember(sharedPreferences, key) {
8991 mutableStateOf(getter(sharedPreferences))
9092 }
93+ val currentGetter by rememberUpdatedState(getter)
9194 DisposableEffect (sharedPreferences, key) {
9295 val listener = OnSharedPreferenceChangeListener { prefs, k ->
9396 if (k == key) {
94- currentValue.value = getter (prefs)
97+ currentValue.value = currentGetter (prefs)
9598 }
9699 }
97100 sharedPreferences.registerOnSharedPreferenceChangeListener(listener)
98101 onDispose {
99102 sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener)
100103 }
101104 }
105+ val currentSetter by rememberUpdatedState(setter)
102106 LaunchedEffect (key, sharedPreferences) {
103107 snapshotFlow { currentValue.value }
104108 .drop(1 )
105109 .collect { newValue ->
106- setter (sharedPreferences, newValue)
110+ currentSetter (sharedPreferences, newValue)
107111 }
108112 }
109113 return currentValue
0 commit comments