Mini-Projecto · App móvel com API
Contexto
Cada par/trio constrói uma app móvel em Flutter que consome uma API (a do projecto da UC02834, uma API pública, ou um JSON local). Domínio à escolha: catálogo de produtos, lista de tarefas, app de receitas, agenda de eventos, leitor de notícias.
Requisitos
Funcionais
- 3+ ecrãs com navegação (lista → detalhe → outro).
- Consumir uma API (GET no mínimo; POST = bónus).
- Estados de ecrã — loading, erro, vazio, dados.
- Estado — pelo menos 1 funcionalidade com estado (favoritos, contador, filtro).
- Armazenamento local — guardar algo (favoritos, settings, cache).
- UI cuidada — coerente, responsiva, alvos de toque adequados.
Não-funcionais
- Modelos de dados (
fromJson). - Código organizado (pastas: screens, models, services, widgets).
- Tratamento de erros (sem crashes).
- README + Git.
Fases
Fase 1 · 1.5h
Planeamento
- Escolher domínio e API.
- Esboçar ecrãs (papel/Figma).
- Definir modelos de dados.
Mockups dos ecrãs + estrutura de dados.
Fase 2 · 2h
Setup + estrutura
flutter create.- Organizar pastas (screens/models/services/widgets).
- Tema e navegação base.
App corre com navegação entre ecrãs vazios.
Fase 3 · 3h
Camada de dados
- Modelos com
fromJson. - Service que consome a API.
- Tratamento de erro/timeout.
Service testável que devolve objectos.
Fase 4 · 3h
Ecrã de lista + detalhe
- Lista com FutureBuilder (4 estados).
- Toque → ecrã de detalhe com dados.
Fluxo lista→detalhe funcional com dados reais.
Fase 5 · 2.5h
Estado + armazenamento
- Funcionalidade com estado (ex.: favoritos).
- Persistir localmente (shared_preferences/hive).
Favoritos persistem após fechar a app.
Fase 6 · 1.5h
Polish
- Ícone, tema, estados vazios bonitos.
- Testar em dispositivo/emulador.
App polida e estável.
Fase 7 · 0.5h
Entrega
- README com screenshots.
- Demo 5 min.
Repositório + APK de demonstração.
Critérios de avaliação
| Item | Peso |
|---|---|
| Navegação multi-ecrã | 15% |
| Consumir API correctamente | 20% |
| Estados de ecrã (loading/erro/vazio/dados) | 15% |
| Gestão de estado | 15% |
| Armazenamento local | 15% |
| UI/UX cuidada | 10% |
| Organização do código | 5% |
| README + Git | 5% |
Reflexão
Em meia página: o que foi mais diferente de programar web? Que parte (UI, API, estado, persistência) foi mais difícil? Que funcionalidade acrescentarias se tivesses mais tempo?