Work with DataStore for simple key-value persistence.
Work with DataStore for simple key-value persistence.
/datastore create settings store # Create new DataStore
/datastore add preference # Add new preference key
/datastore explain patterns # Understand DataStore patterns
Use DataStore for:
Use SQLDelight instead for:
@SingleIn(AppScope::class)
class SettingsDataStore @Inject constructor(
@AppContext private val context: Context,
) {
private val Context.dataStore by preferencesDataStore(name = "settings")
val isDarkModeEnabled: Flow<Boolean> = context.dataStore.data
.map { preferences ->
preferences[DARK_MODE_KEY] ?: false
}
suspend fun setDarkModeEnabled(enabled: Boolean) {
context.dataStore.edit { preferences ->
preferences[DARK_MODE_KEY] = enabled
}
}
companion object {
private val DARK_MODE_KEY = booleanPreferencesKey("dark_mode")
}
}
val STRING_KEY = stringPreferencesKey("string_key")
val INT_KEY = intPreferencesKey("int_key")
val BOOL_KEY = booleanPreferencesKey("bool_key")
val LONG_KEY = longPreferencesKey("long_key")
val FLOAT_KEY = floatPreferencesKey("float_key")
val value: Flow<String> = dataStore.data
.map { it[STRING_KEY] ?: "default" }
suspend fun setValue(value: String) {
dataStore.edit { it[STRING_KEY] = value }
}
suspend fun clear() {
dataStore.edit { it.clear() }
}