TDD — Tab Dados Pessoais (ProfileDialog)
Status
Implementado
Contexto
Aba "Dados Pessoais" do ProfileDialog. Contém: avatar (preview, picker), nome, apelido, email (readonly), telefone, igreja (dropdown). Avatar e dados são salvos juntos via USER_PROFILE_UPDATE.
Contratos
USER_PROFILE_UPDATE (gateway POST)
- Payload:
name,aliasName,phone,unitId,avatarImage?(base64),avatarUrl? - Usado para salvar tanto campos textuais quanto avatar
publicChurchesHttp (GET)
- Lista de igrejas para dropdown; domain via Origin/Referer
- Response:
{ ok, data: { domain, ministryId, ministryName, churches } }
Interface de Usuário (UI)
Aba Dados Pessoais do ProfileDialog (diálogo aberto pelo avatar na Home).
Componentes e organização:
- Avatar — preview circular (116px) com iniciais ou imagem; ícone de câmera no canto para alterar
- Ao tocar no avatar: abre AvatarViewerDialog (zoom, posição, confirmar/cancelar)
- Botões de fonte: "Colar URL e salvar", "Galeria", "Câmera"
- Campos: Nome Completo, Apelido, Email (readonly), Telefone
- Dropdown Igreja — lista de igrejas carregada via
publicChurchesHttp; loading enquanto carrega - Indicação "Alterações no avatar não salvas" quando há draft
- Salvar perfil — botão fixo no rodapé do diálogo
Observação: Email não é editável nesta tela (vinculado à autenticação).
Fluxo
- Abrir ProfileDialog →
_loadChurchOptions()em paralelo com roles - Usuário edita campos e/ou altera avatar (URL, câmera, galeria)
- Avatar: colar URL, escolher da galeria ou câmera → processa imagem (otimização)
- Ao tocar no avatar: abre AvatarViewerDialog (visualizar, ajustar zoom/posição, confirmar)
- Botão "Salvar perfil" → USER_PROFILE_UPDATE com todos os campos alterados
Código de referência
frontend/lib/presentation/modules/profile_dialog/home_profile_dialog_tabs.dart→_buildPersonalDataTabfrontend/lib/presentation/modules/profile_dialog/home_profile_dialog_avatar.dartfrontend/lib/presentation/modules/profile_dialog/home_profile_dialog_actions.dart→_openAvatarSourcePicker,_pickAvatarFromUrl,_pickAvatarFromDevicefrontend/lib/presentation/modules/profile_dialog/avatar_viewer_dialog.dartfrontend/lib/shared/image/process_profile_image.dart