frontend
Flutter / Dart
Flutter em entrevista testa o modelo de UI declarativa: tudo é widget, a diferença entre Stateless e Stateful, o que `setState` realmente faz (reconstrói a subárvore), o papel do `BuildContext`, e o espectro de gerência de estado (setState → Provider/Riverpod → BLoC) e quando cada um.
Simulador de Flutter / Dart
Tópicos por senioridade
Desafios práticos
Cenários reais pra resolver em voz alta, como numa entrevista de verdade — não é múltipla escolha.
- `FutureBuilder` e `StreamBuilder`
Pra que servem `FutureBuilder` e `StreamBuilder` no Flutter, e qual erro comum de reconstrução aparece com eles?
Perguntas mais cobradas
ver todas →- Fácil
StatelessWidget x StatefulWidget
Stateless: só config, reconstrói do zero. Stateful: objeto State persiste dados mutáveis. `setState(fn)` roda fn e agenda rebuild da subárvore daquele widget (não do app).
- Médio
O que é o BuildContext
BuildContext é a posição do widget na árvore; `.of(context)` sobe a árvore procurando ancestral. Context acima do provedor, ou usado após await sem checar `mounted`, quebra o lookup.
- Difícil
Escolher uma abordagem de gerência de estado
setState: estado local de um widget. Provider/Riverpod: estado compartilhado entre telas. BLoC: fluxos com lógica e transições complexas. Comece local, suba conforme compartilha/complica.
- Médio
`Key` no Flutter: quando você precisa de uma
Key importa em listas de widgets stateful que reordenam — sem ela o estado cola no widget errado (igual `key={index}` no React). `ValueKey`: identidade em listas. `GlobalKey`: identidade única na árvore + acesso ao State de fora (forms), mais pesada.
- Médio
`FutureBuilder` e `StreamBuilder`
Reconstroem conforme um future (resultado único) ou stream (sequência) — o builder trata loading/erro/dado via AsyncSnapshot. Erro: criar o future dentro do `build()` → nova requisição a cada rebuild. Crie no `initState` e guarde.
- Médio
`const` widgets e o custo de reconstrução
`const` widget é criado 1x e reusado por identidade — o pai reconstruindo não recria nem re-compara a subárvore. Também: isolar o `setState` num widget pequeno, e passar `child` pré-construído pra widgets que reconstroem.