🌐 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.