Lendo e gravando configurações
Salve e observe as preferências do usuário.
Lendo e gravando configurações é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 3 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.
Leitura e gravação
Com as chaves definidas, as duas operações principais são a leitura do fluxo de dados e a gravação com edit. As leituras são reativas, e as gravações são funções suspensas.
O fluxo de dados
dataStore.data é um Flow<Preferences>. Sempre que você grava, o fluxo emite um novo instantâneo de Preferences, portanto os coletores permanecem automaticamente atualizados.
val rawData: Flow<Preferences> = dataStore.dataMapeando um único valor
Raramente você precisa do objeto Preferences inteiro. Use map para extrair uma chave e aplicar um valor padrão.
val darkMode: Flow<Boolean> = dataStore.data
.map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }Tratando erros de leitura
As leituras do disco podem falhar com IOException. Use catch antes de map para emitir preferências vazias e manter o fluxo ativo.
val darkMode: Flow<Boolean> = dataStore.data
.catch { e ->
if (e is IOException) emit(emptyPreferences())
else throw e
}
.map { it[PrefKeys.DARK_MODE] ?: false }Gravando com edit
Para alterar valores, chame a função suspensa edit. Dentro da expressão lambda, você recebe um objeto de preferências mutável; defina as chaves nele. Todo o bloco constitui uma transação.
suspend fun setDarkMode(enabled: Boolean) {
dataStore.edit { prefs ->
prefs[PrefKeys.DARK_MODE] = enabled
}
}edit é uma função suspensa
Como edit é suspensa, você deve chamá-la a partir de uma corrotina, normalmente dentro de um ViewModel usando viewModelScope.launch. Isso garante que a gravação ocorra fora da thread principal.
fun toggleDarkMode(value: Boolean) {
viewModelScope.launch {
repository.setDarkMode(value)
}
}Atualizando várias chaves
Um único bloco edit pode definir várias chaves. Elas são confirmadas juntas de forma atômica, portanto os observadores nunca veem uma atualização parcial.
dataStore.edit { prefs ->
prefs[PrefKeys.USERNAME] = "ada"
prefs[PrefKeys.DARK_MODE] = true
prefs[PrefKeys.FONT_SIZE] = 16
}Incrementando um valor
Dentro de edit, você pode ler o valor atual e calcular um novo valor, o que é útil para contadores, como a contagem de inicializações.
suspend fun incrementLaunchCount() {
dataStore.edit { prefs ->
val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
prefs[PrefKeys.LAUNCH_COUNT] = current + 1
}
}Removendo e limpando
Remova uma única chave com remove ou limpe o armazenamento com clear, sempre dentro de um bloco edit.
dataStore.edit { prefs ->
prefs.remove(PrefKeys.USERNAME)
}
dataStore.edit { prefs ->
prefs.clear()
}Coletando no Compose
Em um Composable, transforme o fluxo do ViewModel em estado com collectAsStateWithLifecycle(). A interface é recomposta sempre que a configuração muda.
val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)
Switch(
checked = darkMode,
onCheckedChange = { viewModel.toggleDarkMode(it) }
)Um ciclo de leitura, alteração e gravação
Reunindo tudo: a interface lê por meio de um fluxo, o usuário alterna uma opção, o ViewModel inicia uma corrotina que chama edit, o DataStore grava, o fluxo emite novamente e a interface é recomposta. Tudo é reativo de ponta a ponta.
Verificação rápida
Teste sua compreensão sobre leitura e gravação.
Recapitulação
Agora você sabe ler e gravar configurações:
dataStore.dataé umFlow<Preferences>reativomapextrai um único valor, ecatchtrata erros de E/SdataStore.edit { }grava atomicamente a partir de uma corrotinacollectAsStateWithLifecyclecontrola a interface do Compose
Em seguida: dados estruturados tipados com o Proto DataStore.
Perguntas Frequentes
A aula “Lendo e gravando configurações” é grátis?
Sim — o texto completo de “Lendo e gravando configurações” é 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 “Lendo e gravando configurações”?
Salve e observe as preferências do usuário. 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 3 de 4.
Quanto tempo leva a aula “Lendo e gravando configurações”?
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