Partilhar: WhatsApp
aulify
UC UC02249 · T. Multimédia

Ficha 02 · Navegação, fluxo, prototipagem e handoff

Padrões de navegação, fluxos, Figma, implementação
Versão · Aluno
Tempo · 60 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Data
Objectivos da ficha

Parte I · Navegação

Exercício 1 · Padrão certo (10 pts)

Indica o padrão de navegação adequado a cada caso:

a) App de banco com 5 secções principais (Conta, Cartões, Transferir, Investir, Mais). ___

b) Site institucional com 4 secções e 20+ páginas. ___

c) App de mensagens com lista + conversa aberta ao lado (tablet/desktop). ___

a) Tab bar inferior (mobile) — 4-5 itens, sempre visível, troca rápida entre secções principais. b) Top nav horizontal + dropdowns/megamenu (desktop) e hamburger/drawer (mobile). c) Master-detail (lista + detalhe lado a lado) — usa o espaço do ecrã grande; em mobile colapsa para 2 ecrãs.

Exercício 2 · Hamburger sim/não (5 pts)

Quando não deves usar um menu hamburger?

Quando as secções principais são poucas (3-5) e usadas com frequência — esconder atrás de hamburger reduz descoberta e aumenta cliques. Para mobile com poucas secções principais, usa tab bar. Hamburger faz sentido para secções secundárias (definições, ajuda, sobre) ou quando há muitas categorias e o espaço é mesmo escasso.

Exercício 3 · Breadcrumbs (5 pts)

Onde fazem sentido breadcrumbs e onde não?

Sim: sites/apps com hierarquia profunda (e-commerce com categorias/subcategorias; documentação; intranets). Ajudam orientação e permitem subir um nível. Não: apps lineares ou planas (login → home → 2 cliques); apps mobile pequenas; quando o utilizador entra direto via pesquisa sem hierarquia significativa.

Parte II · Fluxos e estados

Exercício 4 · Fluxo de tarefa (15 pts)

Desenha em caixas + setas o fluxo "Adicionar produto ao carrinho e finalizar compra" num site de e-commerce, considerando os caminhos feliz e pelo menos 2 caminhos alternativos (ex.: produto sem stock, pagamento falha).

[Página produto] → [Adicionar ao carrinho] → [Carrinho] → [Checkout: dados]
        ↓                  ↓                                      ↓
    sem stock         confirmação                          [Pagamento]
        ↓             (toast/badge)                          ↙       ↘
   [Avisar quando                                       sucesso     falha
    voltar]                                               ↓           ↓
                                                  [Confirmação]  [Tentar de
                                                                  novo / outro
                                                                  método]

Avaliar: existência de caminho feliz claro, erros previstos (sem stock, pagamento falha), estado intermédio (loading entre passos), confirmação final.

Exercício 5 · Erros previsíveis (10 pts)

Lista 4 tipos de erro que um app deve prever no fluxo de login e o que mostrar em cada.

  1. Campo vazio — mensagem inline ("Indica o email"), botão desativado.
  2. Formato inválido (email sem @, password curta) — validação imediata + dica.
  3. Credenciais erradas — mensagem genérica ("Email ou password incorretos") para não revelar se o email existe.
  4. Rede indisponível — "Sem ligação. Tenta de novo." + retry; manter dados preenchidos.

Bónus: 5) Conta bloqueada/2FA com instruções claras.

Parte III · Prototipar em Figma

Exercício 6 · Componentes e variantes (10 pts)

O que ganhas em criar um componente Botão com variantes em Figma, em vez de copiar/colar?

Exercício 7 · Auto-layout (10 pts)

O que é o Auto-layout do Figma e dá um exemplo concreto de quando o usar.

É o sistema de Figma que disposiciona elementos automaticamente (horizontal/vertical/grid) com gap, padding, resizing e alinhamento — equivalente a Flexbox em CSS.

Exemplo: card de produto com imagem + título + preço + botão. Com auto-layout vertical, ao mudar o texto do título o card expande sozinho; ao adicionar uma badge nova, empurra o conteúdo seguinte. Sem auto-layout, terias de reposicionar tudo manualmente cada vez que algo muda.

Exercício 8 · Prototipar interação (10 pts)

Tens um botão "Adicionar ao carrinho" em Figma. Descreve como prototipar:

a) O toque no botão a abrir um pequeno toast "Adicionado ao carrinho".

b) O número do badge do carrinho aumentar em 1.

a) Em Prototype: tap no botão → Open overlay (a frame "Toast") com animação Move in / Smart animateAfter delay 2sClose overlay.

b) Criar duas variantes do ecrã (Home/Home-badge2); ao tocar no botão, Navigate to Home-badge2 com Smart animate (Figma anima o número como se fosse um contador). Para fluxos reais, isto é "fingir" — o estado em código viria do carrinho real.

Parte IV · Handoff e implementação

Exercício 9 · Handoff (15 pts)

O que entregas a um developer para que possa implementar um ecrã sem perguntar 50 dúvidas?

  1. Ficheiro Figma organizado — frames por ecrã, componentes publicados, tokens/variables nomeados.
  2. Modo Dev ativo: o developer extrai valores CSS, tokens, medidas, assets (SVG/PNG @1x/@2x).
  3. Especificações dos estados — não só "default": hover/focus/disabled/loading/erro/vazio.
  4. Comportamento responsivo — pelo menos 2 breakpoints (mobile/desktop) desenhados; regras claras.
  5. Tipografia — escala definida (tokens) e mapeamento para CSS/Tailwind.
  6. Animações — duração/easing das transições principais (ou Lottie exportado).
  7. Conteúdo real — não "Lorem ipsum"; textos finais ou com tamanhos representativos.
  8. Decisões abertas registadas num comentário / notion/Linear.

Exercício 10 · Tokens em código (10 pts)

Tens estes tokens vindos do Figma:

color/primary    = #2D6CDF
color/text       = #1A1A1A
space/sm         = 8 px
space/md         = 16 px
radius/md        = 12 px

Escreve um excerto CSS que os declare como custom properties num :root e use-os num botão.

:root {
  --color-primary: #2D6CDF;
  --color-text: #1A1A1A;
  --space-sm: 8px;
  --space-md: 16px;
  --radius-md: 12px;
}

.btn {
  background: var(--color-primary);
  color: white;
  padding: var(--space-sm) var(--space-md);
  border-radius: var(--radius-md);
  border: 0;
  cursor: pointer;
}

.btn:focus-visible { outline: 2px solid var(--color-text); outline-offset: 2px; }

(Bónus: mapear os mesmos tokens para tailwind.config ou ficheiro tokens.css partilhado entre projetos.)