Pular para o conteúdo
Skillpedia
Apps de celular280 mil · #55

flutter-dart-code-review

Ajuda seu agente a revisar código Flutter e Dart de forma completa. Ele verifica boas práticas, gerenciamento de estado, performance e segurança, sem focar em bibliotecas específicas.

O que ela faz

Este é um guia para revisar código Flutter e Dart. Ele verifica se o código está bem organizado, usa boas práticas de programação e evita erros comuns, independentemente da biblioteca de gerenciamento de estado usada.

Quando usar

  • ✓Ao revisar o código de outra pessoa.
  • ✓Antes de finalizar uma funcionalidade.
  • ✓Para aprender as melhores práticas em Flutter/Dart.

Exemplo do que pedir para a IA

“Revise este código Flutter, focando nas boas práticas de organização e potenciais erros.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/flutter-dart-code-review/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/flutter-dart-code-review/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O guia verifica a estrutura do projeto, o uso correto da linguagem Dart, as melhores práticas para criar widgets (partes visuais da tela) e como o estado (dados que mudam) é gerenciado. Ele garante que o código seja eficiente, acessível e seguro.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill flutter-dart-code-review

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/flutter-dart-code-review/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Melhores Práticas para Revisão de Código Flutter/Dart

Checklist abrangente e independente de bibliotecas para revisar aplicações Flutter/Dart. Estes princípios se aplicam independentemente da solução de gerenciamento de estado, biblioteca de roteamento ou framework de DI utilizada.


1. Saúde Geral do Projeto

  • O projeto segue uma estrutura de pastas consistente (orientada a funcionalidade ou a camadas)
  • Separação adequada de responsabilidades: UI, lógica de negócios, camadas de dados
  • Sem lógica de negócios em widgets; widgets são puramente de apresentação
  • pubspec.yaml está limpo — sem dependências não utilizadas, versões fixadas apropriadamente
  • analysis_options.yaml inclui um conjunto estrito de lints com configurações de analisador estritas habilitadas
  • Sem instruções print() em código de produção — use dart:developer log() ou um pacote de logging
  • Arquivos gerados (.g.dart, .freezed.dart, .gr.dart) estão atualizados ou em .gitignore
  • Código específico da plataforma isolado por trás de abstrações

2. Armadilhas da Linguagem Dart

  • dynamic implícito: Anotações de tipo ausentes levando a dynamic — habilite strict-casts, strict-inference, strict-raw-types
  • Uso indevido de segurança contra nulos: Excesso de ! (operador bang) em vez de verificações de nulo adequadas ou correspondência de padrões do Dart 3 (if (value case var v?))
  • Falhas na promoção de tipo: Usando this.field onde a promoção de variável local funcionaria
  • Capturando de forma muito ampla: catch (e) sem cláusula on; sempre especifique os tipos de exceção
  • Capturando Error: Subtipos de Error indicam bugs e não devem ser capturados
  • async não utilizado: Funções marcadas como async que nunca await — sobrecarga desnecessária
  • Uso excessivo de late: late usado onde inicialização anulável ou de construtor seria mais segura; adia erros para o tempo de execução
  • Concatenação de strings em loops: Use StringBuffer em vez de + para construção iterativa de strings
  • Estado mutável em contextos const: Campos em classes de construtor const não devem ser mutáveis
  • Ignorando valores de retorno de Future: Use await ou chame explicitamente unawaited() para sinalizar a intenção
  • var onde final funciona: Prefira final para locais e const para constantes em tempo de compilação
  • Imports relativos: Use imports package: para consistência
  • Coleções mutáveis expostas: APIs públicas devem retornar visualizações não modificáveis, não List/Map brutos
  • Falta de correspondência de padrões do Dart 3: Prefira expressões switch e if-case em vez de verificações verbosas de is e casting manual
  • Classes descartáveis para múltiplos retornos: Use registros do Dart 3 (String, int) em vez de DTOs de uso único
  • print() em código de produção: Use dart:developer log() ou o pacote de logging do projeto; print() não tem níveis de log e não pode ser filtrado

3. Melhores Práticas de Widget

Decomposição de Widget:

  • Nenhum widget único com um método build() excedendo ~80-100 linhas
  • Widgets divididos por encapsulamento E por como eles mudam (limites de reconstrução)
  • Métodos auxiliares privados de _build*() que retornam widgets são extraídos para classes de widget separadas (permite reutilização de elementos, propagação de const e otimizações do framework)
  • Widgets Stateless preferidos sobre Stateful onde nenhum estado local mutável é necessário
  • Widgets extraídos estão em arquivos separados quando reutilizáveis

Uso de const:

  • Construtores const usados sempre que possível — evita reconstruções desnecessárias
  • Literais const para coleções que não mudam (const [], const {})
  • O construtor é declarado const quando todos os campos são final

Uso de Key:

  • ValueKey usado em listas/grades para preservar o estado entre reordenações
  • GlobalKey usado com moderação — apenas quando o acesso ao estado através da árvore é realmente necessário
  • UniqueKey evitado em build() — força a reconstrução a cada frame
  • ObjectKey usado quando a identidade é baseada em um objeto de dados em vez de um único valor

Tematização e sistema de design:

  • Cores vêm de Theme.of(context).colorScheme — sem Colors.red codificados ou valores hexadecimais
  • Estilos de texto vêm de Theme.of(context).textTheme — sem TextStyle inline com tamanhos de fonte brutos
  • Compatibilidade com modo escuro verificada — sem suposições sobre fundo claro
  • Espaçamento e dimensionamento usam tokens de design ou constantes consistentes, não números mágicos

Complexidade do método build:

  • Sem chamadas de rede, I/O de arquivo ou computação pesada em build()
  • Sem trabalho de Future.then() ou async em build()
  • Sem criação de assinatura (.listen()) em build()

…

Perguntas frequentes

O que significa 'library-agnostic'?

Significa que as dicas funcionam para qualquer biblioteca de gerenciamento de estado (como BLoC, Riverpod, Provider, etc.) que você esteja usando no seu projeto Flutter.

Por que não usar `print()` no código final?

O `print()` pode poluir o log do aplicativo e não tem níveis de severidade, dificultando a identificação de mensagens importantes. É melhor usar ferramentas de log específicas.

O que são 'widgets'?

Widgets são os blocos de construção das interfaces de usuário em Flutter. Eles representam elementos visuais como textos, botões, layouts, etc.

Detalhes

Descrição original do autor

Library-agnostic Flutter/Dart code review checklist covering widget best practices, state management patterns (BLoC, Riverpod, Provider, GetX, MobX, Signals), Dart idioms, performance, accessibility, security, and clean architecture. Use when reviewing Flutter or Dart code, whatever state management library the project uses.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#55
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas