🌐 Idioma e comunicação
- O idioma padrão é Português do Brasil.
- O assistente entende e responde fluentemente em português, espanhol e inglês, conforme a pergunta.
- Use linguagem clara, objetiva e didática — focando em quem já programa, mas deseja aprender mais rápido.
🧠 Filosofia de código
- Priorize código limpo, legível e modular, mesmo em projetos pequenos.
- Use tipagem forte com o sistema de tipos do Dart; evite
var e dynamic sem necessidade clara.
- Aplique o princípio “claro é melhor do que esperto”: não complique a solução.
- Comente apenas quando o código não for autoexplicativo.
⚙️ Organização de projeto – Atomic Design
- Estruture os widgets seguindo o Atomic Design:
atoms/ – widgets básicos (botões, textos, ícones)
molecules/ – combinações simples (cards, campos com label)
organisms/ – seções completas (formulários, listas com lógica)
templates/ – estrutura de páginas
pages/ – telas completas com rotas
- Outras pastas recomendadas:
models/ – classes de dados e DTOs
services/ – APIs, banco local, e integrações
bindings/ – Bindings GetX para injeção de dependência
controllers/ – Controllers GetX com lógica e estado
routes/ – gerenciamento de rotas com GetX
utils/ – funções auxiliares e extensões
themes/ – estilos, cores e fontes
translations/ – suporte multilinguagem (GetX)
🧭 Gerenciamento de estado – GetX
- Use GetxController para separar lógica e estado da interface.
- Prefira
.obs, Rx<Type>, update(), GetBuilder, Obx() conforme o caso.
- Utilize
Bindings para injeção automática de dependências com Get.put() ou Get.lazyPut().
- Use
Get.find<T>() com cautela e documentação.
- Prefira o padrão controller por tela ou controller por recurso.
- Trate erros diretamente no controller com
.catchError, try/catch, ou observáveis de falha.
- Use
Get.snackbar, Get.dialog, e Get.bottomSheet para comunicação com o usuário.
🎯 Estilo de código e boas práticas
- Siga o Dart Style Guide e use
flutter format.
- Use nomes descritivos e sem abreviações ocultas:
userController, fetchUserData(), LoginPage.
- Prefira
const sempre que possível.
- Evite widgets anônimos muito complexos dentro de árvores: extraia em métodos ou arquivos.
- Use extensões (
extension) para código repetido e limpo (ex: context.theme, Rx<T>.isLoading()).
🔐 Segurança e tratamento de erros
- Use
try/catch para blocos críticos com logs e mensagens claras para o usuário.
- Nunca exponha chaves, tokens ou dados sensíveis no app.
- Prefira bibliotecas como
flutter_dotenv para carregar variáveis externas.
- Trate os retornos
null de forma segura e visível (sem ! desnecessário).
- Use
Rxn<T> quando valores opcionais forem esperados em reatividade.
🧪 Testes
- Escreva testes de:
- Lógica com
test
- Widgets com
flutter_test
- Controllers GetX com
mocktail, get_test ou riverpod_test (adaptado)
- Para
GetxController, isole chamadas externas com mocks.
- Teste
bindings, routes e navegação com Get.testMode = true.
📐 Performance e composição
- Otimize rebuilds usando
Obx() apenas onde o estado muda.
- Use
GetBuilder() quando quiser controle manual sobre update().
- Evite recriar objetos pesados dentro do
build.
- Use
const, Keys, e ListView.builder para listas longas.
🧑🎨 UI/UX e responsividade
- Use
LayoutBuilder, MediaQuery, e Flexible para adaptar a interface.
- Adote
ThemeData, Get.theme, e design tokens para facilitar mudança global.
- Siga o padrão Material 3 (
useMaterial3: true) e explore animações modernas (AnimatedSwitcher, Hero, PageTransition).
- Crie interfaces acessíveis e prepare para dark mode.
🚀 Produtividade com VSCode e Flutter
- Use extensões como:
- Flutter (oficial)
- GetX Snippets
- Flutter Intl
- Error Lens
- Automatize geração com:
flutter pub run build_runner build --delete-conflicting-outputs
json_serializable, freezed, equatable (se usar)
- Crie snippets de projeto com estruturas base usando
GetMaterialApp, rotas e bindings.