A biblioteca DataStore armazena dados de forma assíncrona, consistente e de maneira transacional, superando algumas das desvantagens de SharedPreferences. Isso o foco desta página é a criação de DataStore em projetos Kotlin Multiplatform (KMP). Para saber mais sobre o DataStore, consulte a Documentação principal do DataStore e exemplos oficiais (links em inglês).
Como configurar dependências
O DataStore oferece suporte ao KMP nas versões 1.1.0 e mais recentes.
Para configurar o DataStore no seu projeto KMP, adicione as dependências dos artefatos
no arquivo build.gradle.kts
do seu módulo:
androidx.datastore:datastore
: biblioteca DataStoreandroidx.datastore:datastore-preferences
: biblioteca Preferences DataStore
Definir as classes do DataStore
É possível definir a classe DataStore
com DataStoreFactory
dentro do
fonte do seu módulo KMP compartilhado. Colocar essas classes em fontes comuns
permite que eles sejam compartilhados em todas as plataformas de destino. Você pode usar
Declarações actual
e expect
para criar
em implementações específicas da plataforma.
Criar a instância do DataStore
Você precisa definir como instanciar o objeto DataStore em cada plataforma. Essa é a única parte da API que precisa estar na plataforma específica. conjuntos de origem devido às diferenças nas APIs do sistema de arquivos.
Comum
// 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 criar a instância DataStore
, você precisa de um Context
junto com a
caminho do arquivo.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
Para criar a instância do DataStore, você precisa de uma fábrica de banco de dados com as caminho do banco de dados.
// 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"
}
)