How to get false as initial state Datastore in Jetpack Compose? I would initial state be false. I changed it to false in CollectAsState() but it always return true.
class DataStoreUtil(private val context: Context) {
companion object {
private val Context.dataStore: DataStore<androidx.datastore.preferences.core.Preferences> by preferencesDataStore("settings")
val FORCE_DARK_THEME = booleanPreferencesKey("force_dark_theme")
}
val getForceDarkTheme: Flow<Boolean> = context.dataStore.data
.map { preferences ->
preferences[FORCE_DARK_THEME] ?: true
}
suspend fun saveForceDarkTheme(value: Boolean) {
context.dataStore.edit { preferences ->
preferences[FORCE_DARK_THEME] = value
}
}
}
@Composable
fun MySwitch() {
val scope = rememberCoroutineScope()
val dataStore = DataStoreUtil(LocalContext.current)
val switchState by dataStore.getForceDarkTheme.collectAsState(false)
Switch(
checked = switchState,
onCheckedChange = {
scope.launch{
dataStore.saveForceDarkTheme(it)
}
}
)
Text(
text = if(switchState) "foo" else "bar",
)
}
>Solution :
If you want to handle scenarios where there is no value present in the data store you can change to,
val getForceDarkTheme: Flow<Boolean?> = context.dataStore.data
.map { preferences ->
preferences[FORCE_DARK_THEME]
}
This returns null
when there is no value and you can do null
check and use required logic.