La bibliothèque DataStore stocke les données de manière asynchrone, cohérente et transactionnelle, en éliminant certains inconvénients de SharedPreferences. Cette page se concentre sur la création de DataStore dans les projets Kotlin Multiplatform (KMP). Pour en savoir plus sur DataStore, consultez la documentation principale sur DataStore et les exemples officiels.
Configurer les dépendances
DataStore est compatible avec KMP dans les versions 1.1.0 et ultérieures.
Pour configurer DataStore dans votre projet KMP, ajoutez les dépendances des artefacts dans le fichier build.gradle.kts
de votre module:
androidx.datastore:datastore
: bibliothèque DataStoreandroidx.datastore:datastore-preferences
: bibliothèque Preferences DataStore
Définir les classes DataStore
Vous pouvez définir la classe DataStore
avec DataStoreFactory
dans la source commune de votre module KMP partagé. Placer ces classes dans des sources communes permet de les partager sur toutes les plates-formes cibles. Vous pouvez utiliser les déclarations actual
et expect
pour créer des implémentations spécifiques à la plate-forme.
Créer l'instance DataStore
Vous devez définir comment instancier l'objet DataStore sur chaque plate-forme. Il s'agit de la seule partie de l'API qui doit figurer dans les ensembles de sources de plate-forme spécifiques en raison des différences entre les API de système de fichiers.
Courante
// 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
Pour créer l'instance DataStore
, vous avez besoin d'un Context
ainsi que du chemin d'accès au fichier.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
Pour créer l'instance DataStore, vous avez besoin d'une fabrique DataStore ainsi que du chemin d'accès DataStore.
// 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"
}
)