La biblioteca de DataStore almacena datos de forma asíncrona, coherente y transaccional, lo que resuelve algunos de los inconvenientes de SharedPreferences. Esta se centra en la creación de DataStore en proyectos multiplataforma de Kotlin (KMP). Para obtener más información sobre DataStore, consulta el Documentación principal de DataStore y muestras oficiales.
Configura dependencias
DataStore admite KMP en las versiones 1.1.0 y posteriores.
Para configurar DataStore en tu proyecto de KMP, agrega las dependencias para los artefactos
En el archivo build.gradle.kts
de tu módulo:
androidx.datastore:datastore
: Biblioteca de DataStoreandroidx.datastore:datastore-preferences
- La biblioteca de Preferences DataStore
Cómo definir las clases de DataStore
Puedes definir la clase DataStore
con DataStoreFactory
dentro del elemento común.
fuente de tu módulo KMP compartido. Colocar estas clases en fuentes comunes
les permite compartirse
en todas las plataformas objetivo. Puedes usar
Declaraciones actual
y expect
para crear
implementaciones específicas de la plataforma.
Crea la instancia de DataStore
Debes definir cómo crear una instancia del objeto DataStore en cada plataforma. Esta es la única parte de la API que se requiere para estar en la plataforma específica. debido a las diferencias en las APIs del sistema de archivos.
Común
// shared/src/androidMain/kotlin/createDataStore.kt
/**
* Gets the singleton DataStore instance, creating it if necessary.
*/
fun createDataStore(producePath: () -> String): DataStore<Preferences> =
PreferenceDataStoreFactory.createWithPath(
produceFile = { producePath().toPath() }
)
internal const val dataStoreFileName = "dice.preferences_pb"
Android
Para crear la instancia DataStore
, necesitas un Context
junto con el
ruta de acceso al archivo.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
Para crear la instancia de DataStore, necesitas una fábrica de bases de datos junto con el la ruta de acceso de la base de datos.
// shared/src/iosMain/kotlin/createDataStore.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
producePath = {
val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(
directory = NSDocumentDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
requireNotNull(documentDirectory).path + "/$dataStoreFileName"
}
)