feat(theme): tema claro/escuro/automático nos apps ACS e Paciente (issue #9) - #11
Conversation
…ciente Implementa a issue #9: ThemeMode (claro/escuro/automatico) persistido via shared_preferences, tela de Preferencias acessivel pela aba Mais, e paleta clara testada contra WCAG 2.2 AA nos dois apps. As cores clinicas de RiskLevel mantem o mesmo preenchimento nos dois temas; a variante usada como texto/icone passou a ser um ThemeExtension (AcsRiskColors / PatientRiskColors), ja que a cor certa depende do tema ativo em tempo de execucao. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Revisão da PR #11Executei a revisão em cima do branch Qualidade do código: aprovada
Bloqueador de merge (não é problema de qualidade do código)A branch está bem atrás de O rebase, porém, não é mecânico: testei num worktree isolado e
Recomendo rebasear Sugestões não-bloqueadoras
🤖 Gerado com Claude Code |
|
Olá @vinimartinsufrr favor, coorigir os conflitos apresentado para efetuarmos o merge da PR. |
Resolve os conflitos apontados pelo professor no PR #11 (issue #9): apps/acs/lib/app/app.dart, apps/patient/lib/app/app.dart e apps/patient/pubspec.yaml/.lock. A develop avançou 227 commits desde a base da branch (RF15, lembretes, Meus Dados/LGPD, onboarding, RBAC, TLS no RPC etc.); a resolução combina essas features com o suporte a tema claro/escuro/automático sem perder nenhum dos dois lados. Também corrige referências remanescentes a PatientColors.dangerOnSurface/ accentOnSurface (API antiga, estática) introduzidas pela develop após esta branch já ter convertido essas cores em ThemeExtension — substituídas por context.patientRisk.*, e propaga themeController pelos dois novos call-sites (_reenter, OnboardingScreen) que a develop criou sem esse parâmetro. apps/patient: flutter analyze limpo, flutter test 128/128. apps/acs: flutter analyze limpo, flutter test 173/173. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 37309636 | Triggered | Generic Password | f248908 | .github/workflows/ci.yml | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secret safely. Learn here the best practices.
- Revoke and rotate this secret.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
|
@hbgit sobre o alerta do GitGuardian: verifiquei e é falso positivo, não um segredo real. A linha apontada ( # tem a guarda que faz o build falhar sem SINALACS_MQTT_PASSWORD: cobri-loO detector "Generic Password" do GitGuardian reage a esse padrão (palavra "PASSWORD" perto de algo que parece atribuição) mesmo sem valor nenhum ali. Confirmei também que:
Fica a seu critério marcar o achado como falso positivo no dashboard do GitGuardian. |
O que muda
Adiciona suporte a tema Claro/Escuro/Automático nos apps ACS e Paciente,
seguindo a sugestão técnica da própria issue:
ThemeModenativo do Flutter,sem framework de estado externo, e persistência via
shared_preferences(preferência de UI não sensível, não precisa de
flutter_secure_storage).ThemeController(core/services/theme_controller.dart, igual nos doisapps):
ValueNotifier<ThemeMode>simples, comrestore()esetThemeMode()viashared_preferences. Falha de leitura ou gravaçãonunca trava a tela, só mantém
ThemeMode.system, o padrão inicial.MaterialAppde cada app agora usatheme,darkThemeethemeMode(antes só
theme, sempre escuro, ignorando a preferência do sistema).ThemeSettingsScreen, acessível pela aba "Mais" já existente,com os três modos via
RadioGroup<ThemeMode>.AcsLightColors/PatientLightColors), calculada etestada contra WCAG 2.2 AA em
contrast_tokens_light_test.dart, queespelha o
contrast_tokens_test.dartdo escuro já existente.RiskLevel(vermelho/amarelo/verde): o preenchimentonão muda em nenhum tema. Só a variante usada como texto/ícone mudou de
constante fixa para
ThemeExtension(AcsRiskColors/PatientRiskColors,acessado via
context.acsRisk/context.patientRisk), já que a cor certadepende do tema ativo em tempo de execução. Cai para a variante escura
quando a extensão não está registrada, para não quebrar testes que montam
um
MaterialAppisolado.Colors.white70eColors.white54fixos (ficariam ilegíveis no tema claro). Agora usamTheme.of(context).colorScheme.onSurfaceVariant.Por quê
Fecha a issue #9. Os apps ignoravam a preferência de tema do sistema
operacional e não ofereciam forma nenhuma de o usuário trocar entre
claro e escuro, uma lacuna de acessibilidade para quem precisa de tema
claro por baixa visão ou sensibilidade a contraste.
Como testar
Na aba "Mais" > "Preferências", alternar entre Claro/Escuro/Automático e
confirmar que a UI inteira muda na hora, que a fila de risco continua
legível nos três modos, e que a escolha persiste ao recarregar o app.
Fora do escopo (conforme a própria issue)
apps/admin, não tocado.RiskLevel) em si. Só as variantes de texto/íconeforam adicionadas, os valores de preenchimento são os mesmos de antes.
Closes #9
🤖 Generated with Claude Code