La libreria DataStore archivia i dati in modo asincrono, coerente e transazionale, superando alcuni svantaggi di SharedPreferences. Questa pagina è incentrata sulla creazione di DataStore nei progetti Kotlin Multiplatform (KMP). Per maggiori informazioni su DataStore, consulta la documentazione principale per DataStore e gli esempi ufficiali.
Configurazione delle dipendenze
DataStore supporta KMP nelle versioni 1.1.0 e successive.
Per configurare il DataStore nel progetto KMP, aggiungi le dipendenze per gli artefatti nel file build.gradle.kts
del modulo:
androidx.datastore:datastore
- Libreria DataStoreandroidx.datastore:datastore-preferences
- La raccolta del DataStore preferenze
Definisci le classi DataStore
Puoi definire la classe DataStore
con DataStoreFactory
all'interno dell'origine comune del modulo KMP condiviso. Se posizioni questi corsi in origini comuni,
possono essere condivisi tra tutte le piattaforme di destinazione. Puoi utilizzare le 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 essere inclusa negli specifici set di origini della piattaforma 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
, è necessario un Context
insieme al percorso del file.
// 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 al percorso 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"
}
)