La libreria Datastore archivia i dati in modo asincrono, coerente a livello transazionale, superando alcuni svantaggi di SharedPreferences. Questo è incentrata sulla creazione di un datastore nei progetti Kotlin Multiplatform (KMP). Per ulteriori informazioni su Datastore, vedi documentazione principale per Datastore e campioni ufficiali.
Configurazione delle dipendenze
DataStore supporta KMP nelle versioni 1.1.0 e successive.
Per configurare un datastore nel tuo progetto KMP, aggiungi le dipendenze per gli artefatti
nel file build.gradle.kts
per il tuo modulo:
androidx.datastore:datastore
- Libreria Datastoreandroidx.datastore:datastore-preferences
- La libreria del datastore delle preferenze
Definire le classi Datastore
Puoi definire la classe DataStore
con DataStoreFactory
all'interno del campo
sorgente del modulo KMP condiviso. Inserire questi corsi nelle fonti comuni
consente di condividerli su tutte le piattaforme di destinazione. Puoi utilizzare la modalità
Dichiarazioni actual
e expect
per creare
implementazioni specifiche per piattaforma.
crea l'istanza Datastore
Devi definire come creare un'istanza dell'oggetto Datastore su ogni piattaforma. Questa è l'unica parte dell'API che deve trovarsi nella piattaforma specifica set di origini dati a causa delle differenze nelle API del file system.
Comune
// 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
Per creare l'istanza DataStore
, sono necessari Context
e
del file YAML.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
Per creare l'istanza Datastore, è necessaria una fabbrica di database insieme del database.
// 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"
}
)