0Pricing
Android Academy · Aula

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.data

Mapeando 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 é um Flow<Preferences> reativo
  • map extrai um único valor, e catch trata erros de E/S
  • dataStore.edit { } grava atomicamente a partir de uma corrotina
  • collectAsStateWithLifecycle controla 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

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