Preferences DataStore
Almacene configuraciones clave-valor de forma reactiva
Preferences DataStore es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
Preferences DataStore
Preferences DataStore almacena pares sencillos de clave-valor, igual que SharedPreferences, pero con la API asíncrona moderna. No impone un esquema ni seguridad de tipos sobre el objeto completo.
Se accede a los valores mediante claves tipadas.
Crear el DataStore
Debe crear una única instancia de DataStore por archivo mediante el delegado de propiedades preferencesDataStore, en el nivel superior de un archivo de Kotlin. name se convierte en el nombre del archivo en disco.
import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences
val Context.dataStore: DataStore<Preferences> by
preferencesDataStore(name = "settings")Por qué usar un delegado de nivel superior
El delegado garantiza que haya exactamente una instancia de DataStore para ese nombre de archivo en su proceso. Crear dos para el mismo archivo genera un error, porque ambas entrarían en conflicto al acceder a los mismos datos.
Declararlo como una extensión de Context de nivel superior hace que sea un singleton.
Claves de preferencias
Cada valor necesita una clave tipada. La clave identifica la entrada y fija su tipo. Las funciones auxiliares crean claves para cada tipo compatible.
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")Tipos de clave compatibles
Preferences DataStore admite estos tipos de clave primitivos:
stringPreferencesKeybooleanPreferencesKeyintPreferencesKey,longPreferencesKey,floatPreferencesKey,doublePreferencesKeystringSetPreferencesKey
Definir las claves en un solo lugar
Un patrón habitual consiste en reunir todas las claves en un object para encontrarlas y reutilizarlas fácilmente, evitando errores tipográficos en los nombres de cadena.
object PrefKeys {
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val FONT_SIZE = intPreferencesKey("font_size")
}Claves de cadena frente a nombres de variables
Tenga en cuenta que el argumento de tipo cadena (por ejemplo, "dark_mode") es lo que se escribe en el disco. Si lo cambia de nombre más adelante, los valores antiguos dejarán de estar accesibles. El nombre de Kotlin val solo se usa en su código.
Un DataStore por cada ámbito
Puede crear varios DataStore para distintos ámbitos, cada uno con su propio nombre de archivo; por ejemplo, un almacén de "settings" y otro de "user_session". Mantenga juntas las claves relacionadas.
val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")Acceder desde la capa de interfaz de usuario
Aunque el delegado depende de Context, no lo lea directamente en los Composables. Inyecte el DataStore en un repositorio y exponga después los flujos a un ViewModel. Así la interfaz de usuario se puede probar fácilmente.
Estructura sencilla de un repositorio
Envolver DataStore en una clase de repositorio le proporciona una API clara y un único lugar donde definir las claves y la lógica de mapeo.
class SettingsRepository(private val dataStore: DataStore<Preferences>) {
val darkMode: Flow<Boolean> = dataStore.data
.map { it[PrefKeys.DARK_MODE] ?: false }
}Valores predeterminados
Es posible que una clave aún no exista, por lo que las lecturas devuelven null. Proporcione siempre un valor predeterminado con el operador Elvis ?: al mapear un valor de preferencia.
val fontSize: Flow<Int> = dataStore.data
.map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }Comprobación rápida
Compruebe su comprensión de las claves de preferencias.
Resumen
Ha configurado Preferences DataStore:
- Crear una instancia mediante el delegado
preferencesDataStorede nivel superior - Definir claves tipadas con
stringPreferencesKey,booleanPreferencesKey, etc. - Reunir las claves en un
objecty encapsular el acceso en un repositorio - Proporcionar siempre valores predeterminados para las claves que falten
A continuación: leer y escribir realmente esas preferencias.
Preguntas frecuentes
¿La lección «Preferences DataStore» es gratis?
Sí — el texto completo de «Preferences DataStore» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Preferences DataStore»?
Almacene configuraciones clave-valor de forma reactiva Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Preferences DataStore»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- DataStore frente a SharedPreferences
- Preferences DataStore
- Leer y escribir configuraciones
- Proto DataStore