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:
stringPreferencesKeybooleanPreferencesKeyintPreferencesKey,longPreferencesKey,floatPreferencesKey,doublePreferencesKeystringSetPreferencesKey
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
preferencesDataStoreno nível superior - Defina chaves tipadas com
stringPreferencesKey,booleanPreferencesKeyetc. - Reúna as chaves em um
objecte 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
- DataStore versus SharedPreferences
- DataStore de preferências
- Lendo e gravando configurações
- Proto DataStore