0Pricing
Android Academy · Aula

DataStore de preferências

Armazene configurações de chave e valor de forma reativa.

DataStore de preferências é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.

Preferences DataStore

O Preferences DataStore armazena pares simples de chave e valor, assim como o SharedPreferences, mas com a API assíncrona moderna. Ele não impõe um esquema nem segurança de tipos ao objeto inteiro.

Você acessa os valores por meio de chaves tipadas.

Criando o DataStore

Você cria uma única instância de DataStore por arquivo usando o delegado de propriedade preferencesDataStore no nível superior de um arquivo Kotlin. O name torna-se o nome do arquivo armazenado em disco.

import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences

val Context.dataStore: DataStore<Preferences> by
    preferencesDataStore(name = "settings")

Por que usar um delegado no nível superior

O delegado garante que exista exatamente uma instância de DataStore para esse nome de arquivo no seu processo. Criar duas para o mesmo arquivo gera um erro, pois elas tentariam controlar os mesmos dados.

Declará-lo como uma extensão de Context no nível superior faz com que ele permaneça um singleton.

Chaves de preferência

Cada valor precisa de uma chave tipada. A chave dá nome à entrada e fixa o tipo dela. Funções auxiliares criam chaves para cada tipo compatível.

import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey

val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")

Tipos de chave compatíveis

O Preferences DataStore é compatível com estes tipos primitivos de chave:

  • stringPreferencesKey
  • booleanPreferencesKey
  • intPreferencesKey, longPreferencesKey, floatPreferencesKey, doublePreferencesKey
  • stringSetPreferencesKey

Defina as chaves em um só lugar

Um padrão comum é reunir todas as chaves em um object para facilitar sua localização e reutilização, evitando erros de digitação nos nomes de texto.

object PrefKeys {
    val USERNAME = stringPreferencesKey("username")
    val DARK_MODE = booleanPreferencesKey("dark_mode")
    val FONT_SIZE = intPreferencesKey("font_size")
}

Chaves de texto versus nomes de variáveis

Lembre-se de que o argumento string (por exemplo, "dark_mode") é o que é gravado no disco. Se você o renomear mais tarde, os valores antigos ficarão inacessíveis. O nome val do Kotlin serve apenas para o seu código.

Um DataStore por responsabilidade

Você pode criar vários DataStores para responsabilidades diferentes, cada um com seu próprio nome de arquivo; por exemplo, um armazenamento de "settings" e outro de "user_session". Mantenha juntas as chaves relacionadas.

val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")

Acessando a partir da camada de interface

Embora o delegado pertença a Context, não o leia diretamente em Composables. Injete o DataStore em um repositório e, em seguida, exponha fluxos a um ViewModel. Isso mantém a interface testável.

Uma estrutura simples de repositório

Envolver o DataStore em uma classe de repositório oferece uma API limpa e um único lugar para definir as chaves e a lógica de mapeamento.

class SettingsRepository(private val dataStore: DataStore<Preferences>) {
    val darkMode: Flow<Boolean> = dataStore.data
        .map { it[PrefKeys.DARK_MODE] ?: false }
}

Valores padrão

Uma chave pode ainda não existir, portanto as leituras retornam null. Sempre forneça um valor padrão com o operador Elvis ?: ao mapear um valor de preferência.

val fontSize: Flow<Int> = dataStore.data
    .map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }

Verificação rápida

Teste sua compreensão sobre chaves de preferência.

Recapitulação

Você configurou o Preferences DataStore:

  • Crie uma instância por meio do delegado preferencesDataStore no nível superior
  • Defina chaves tipadas com stringPreferencesKey, booleanPreferencesKey etc.
  • Reúna as chaves em um object e envolva o acesso em um repositório
  • Sempre forneça valores padrão para chaves ausentes

Em seguida: ler e gravar essas configurações de fato.

Perguntas Frequentes

A aula “DataStore de preferências” é grátis?

Sim — o texto completo de “DataStore de preferências” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.

O que vou aprender em “DataStore de preferências”?

Armazene configurações de chave e valor de forma reativa. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Android Academy?

Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “DataStore de preferências”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Android Academy?

Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. DataStore versus SharedPreferences
  2. DataStore de preferências
  3. Lendo e gravando configurações
  4. Proto DataStore
← Voltar para Android Academy