Die DataStore-Bibliothek speichert Daten asynchron, einheitlich und transaktional und überwindet damit einige Nachteile von SharedPreferences. Dieses konzentriert sich auf das Erstellen von DataStore in KMP-Projekten (Kotlin Multiplatform). Weitere Informationen zu DataStore finden Sie in der primäre Dokumentation für DataStore und offizielle Beispiele.
Abhängigkeiten einrichten
DataStore unterstützt KMP in den Versionen 1.1.0 und höher.
Fügen Sie die Abhängigkeiten für die Artefakte hinzu, um DataStore in Ihrem KMP-Projekt einzurichten
in der Datei build.gradle.kts
für Ihr Modul:
androidx.datastore:datastore
– DataStore-Bibliothekandroidx.datastore:datastore-preferences
– DataStore-Bibliothek für Einstellungen
DataStore-Klassen definieren
Sie können die DataStore
-Klasse mit DataStoreFactory
im gemeinsamen
Quelle des freigegebenen KMP-Moduls. Diese Klassen in gemeinsamen Quellen platzieren
können sie auf allen Zielplattformen verwendet werden. Sie können
Zu erstellende actual
- und expect
-Deklarationen
plattformspezifischen Implementierungen.
DataStore-Instanz erstellen
Sie müssen festlegen, wie das DataStore-Objekt auf jeder Plattform instanziiert werden soll. Dies ist der einzige Teil der API, der auf der jeweiligen Plattform vorhanden sein muss Quellsätzen aufgrund der Unterschiede zwischen Dateisystem-APIs.
Verbreitet
// 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
Zum Erstellen der Instanz DataStore
benötigen Sie ein Context
sowie die
Dateipfad.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
Zum Erstellen der DataStore-Instanz benötigen Sie eine Datenbank-Factory zusammen mit der Datenbankpfad.
// 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"
}
)