Skip to content

Commit 615cb5e

Browse files
Use rememberUpdatedState for captured lambdas
1 parent 15aa979 commit 615cb5e

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

app/src/main/java/com/dp/logcatapp/ui/theme/Theme.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.material3.dynamicDarkColorScheme
88
import androidx.compose.material3.dynamicLightColorScheme
99
import androidx.compose.material3.lightColorScheme
1010
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.getValue
1112
import androidx.compose.ui.graphics.Color
1213
import androidx.compose.ui.platform.LocalContext
1314
import com.dp.logcatapp.util.SettingsPrefKeys
@@ -101,15 +102,15 @@ fun LogcatReaderTheme(
101102
) {
102103

103104
val context = LocalContext.current
104-
val appThemeSetting = rememberStringSharedPreference(
105+
val appThemeSetting by rememberStringSharedPreference(
105106
key = SettingsPrefKeys.Appearance.KEY_THEME,
106107
default = SettingsPrefKeys.Appearance.Default.THEME,
107-
).value
108+
)
108109

109-
val dynamicColor = rememberBooleanSharedPreference(
110+
val dynamicColor by rememberBooleanSharedPreference(
110111
key = SettingsPrefKeys.Appearance.KEY_DYNAMIC_COLOR,
111112
default = SettingsPrefKeys.Appearance.Default.DYNAMIC_COLOR
112-
).value
113+
)
113114

114115
val colorScheme = when (appThemeSetting) {
115116
Theme.AUTO -> {

app/src/main/java/com/dp/logcatapp/util/SharedPreference.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import androidx.compose.runtime.Composable
66
import androidx.compose.runtime.DisposableEffect
77
import androidx.compose.runtime.LaunchedEffect
88
import androidx.compose.runtime.MutableState
9+
import androidx.compose.runtime.getValue
910
import androidx.compose.runtime.mutableStateOf
1011
import androidx.compose.runtime.remember
12+
import androidx.compose.runtime.rememberUpdatedState
1113
import androidx.compose.runtime.snapshotFlow
1214
import androidx.compose.ui.platform.LocalContext
1315
import 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

Comments
 (0)