schneider-as/flutter-enhanced-assistant-rules icon
public
Published on 5/26/2025
Flutter Rules

Rules

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