Skip to main content

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

  1. Abrir ProfileDialog → _loadChurchOptions() em paralelo com roles
  2. Usuário edita campos e/ou altera avatar (URL, câmera, galeria)
  3. Avatar: colar URL, escolher da galeria ou câmera → processa imagem (otimização)
  4. Ao tocar no avatar: abre AvatarViewerDialog (visualizar, ajustar zoom/posição, confirmar)
  5. 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_buildPersonalDataTab
  • frontend/lib/presentation/modules/profile_dialog/home_profile_dialog_avatar.dart
  • frontend/lib/presentation/modules/profile_dialog/home_profile_dialog_actions.dart_openAvatarSourcePicker, _pickAvatarFromUrl, _pickAvatarFromDevice
  • frontend/lib/presentation/modules/profile_dialog/avatar_viewer_dialog.dart
  • frontend/lib/shared/image/process_profile_image.dart