Skip to content

Configurações — Design Técnico

Gerado pelo Writer (Reversa) em 2026-05-11

Arquitetura

App init
  → dispatch(ConfiguracoesAction.carregarConfiguracoes())
       ↓ guard: ConfiguracoesSelect.iniciado === false
       → ConfiguracoesUsuarioRepository.getConfiguracoes()
           → MMKV.getString(key) ?? default
       → configuracoesSlice.fulfilled → store preenchido

Usuário altera configuração
  → dispatch(alterarFamiliaFonte/alterarTamanhoFonte/etc.)
       → _persistirConfiguracaoMusica({key: value})
           → ConfiguracoesUsuarioRepository.setConfiguracao(key, value)
           → MMKV.setString(key, value)
       → configuracoesSlice.fulfilled → store atualizado

Usuário altera tema
  → dispatch(alterarTema(tema))
       → _persistirConfiguracaoTema({tema})
       → UnistylesRuntime.setTheme(tema)  ← síncrono
       → MMKV persiste

MMKV — ConfiguracoesUsuarioRepository

  • ID da instância: @cantaIgreja/configuracoes
  • Cada configuração é uma string armazenada com sua própria chave (ex: fonte, tamanho, estiloRefrao, tema)
  • Leitura: MMKV.getString(stateKey) ?? default
  • Escrita: MMKV.setString(key, value)

Estado Redux — ConfiguracoesState

interface ConfiguracoesState {
  musica: ConfiguracoesMusica; // fonte, tamanho, estiloRefrao
  tema: ConfiguracoesTema; // tema
  estadoRequisicaoCarregamentoInicial: EstadoRequisicao;
}

UnistylesRuntime

UnistylesRuntime.setTheme(tema) é chamado tanto na alteração quanto possivelmente na inicialização para sincronizar o tema carregado do MMKV com o runtime de estilos.

Riscos e Lacunas

  • 🟡 Tema.CLARO_LEGADO e Tema.CLARO_ALTERNATIVO — temas alternativos que podem não estar todos registrados no UnistylesRuntime
  • 🟡 Tema.SISTEMA comentado no código — feature abandonada ou em desenvolvimento
  • 🟡 ConfiguracoesScreen.tsx não lida completamente — controles de UI não mapeados