Regras do linter
Detalhes sobre o linter do Dart e as regras de estilo que você pode escolher.
Use o linter do Dart para identificar possíveis problemas no seu código Dart.
Você pode usar o linter pela sua IDE
ou com o comando dart analyze.
Para informações sobre como habilitar e desabilitar regras individuais do linter, consulte as
seções de regras individuais da documentação do analyzer.
Esta página lista todas as regras do linter, com detalhes como quando você pode querer usar cada regra, quais padrões de código a acionam e como você pode corrigir seu código.
Conjuntos
#Para evitar a necessidade de selecionar individualmente regras compatíveis do linter, considere começar com um conjunto de regras do linter, que os seguintes pacotes fornecem:
- lints
-
Contém dois conjuntos de regras mantidos pela equipe do Dart. Recomendamos usar pelo menos o conjunto
core, que é usado ao pontuar pacotes publicados no pub.dev. Ou, melhor ainda, use o conjuntorecommended, um superconjunto decoreque identifica problemas adicionais e impõe estilo e formato. Se você estiver escrevendo código Flutter, use o conjunto de regras do pacoteflutter_lints, que se baseia emlints.
- flutter_lints
-
Contém o conjunto
flutter, que a equipe do Flutter incentiva você a usar em aplicativos, pacotes e plugins Flutter. Este conjunto é um superconjunto do conjuntorecommended, que por sua vez é um superconjunto do conjuntocore, que determina parcialmente a pontuação de pacotes publicados no pub.dev.
Para aprender como usar um conjunto de regras específico, acesse a documentação sobre habilitar e desabilitar regras do linter.
Para encontrar mais conjuntos de regras predefinidos,
confira o tópico #lints
no pub.dev.
Status
#Cada regra tem um status ou nível de maturidade:
- Estável (Stable)
-
Estas regras são seguras de usar e são verificadas como funcionais com as versões mais recentes da linguagem Dart. Todas as regras são consideradas estáveis, a menos que sejam marcadas como experimentais, descontinuadas ou removidas.
- Experimental
-
Estas regras ainda estão em avaliação e podem nunca ser estabilizadas. Use-as com cautela e reporte quaisquer problemas que encontrar.
- Descontinuada (Deprecated)
-
Estas regras não são mais recomendadas para uso e podem ser removidas em uma futura versão do Dart.
- Removida (Removed)
-
Estas regras já foram removidas na versão estável mais recente do Dart.
Correções rápidas
#Algumas regras podem ser corrigidas automaticamente usando correções rápidas (quick fixes). Uma correção rápida é uma edição automatizada voltada a corrigir o problema reportado pela regra do linter.
Se a regra tiver uma correção rápida,
ela pode ser aplicada usando dart fix
ou pelo seu editor com suporte a Dart.
Para saber mais, veja Correções rápidas para problemas de análise.
Regras
#A seguir está um índice de todas as regras do linter e uma breve descrição de sua funcionalidade. Para saber mais sobre uma regra específica, clique no botão Learn more no card dela.
Para uma lista gerada automaticamente com todas as regras do linter
no Dart 3.13.7,
confira Todas as regras do linter.
Coloque os parâmetros nomeados obrigatórios primeiro.
Especifique @required em parâmetros nomeados sem valores padrão.
Evite literais bool em expressões condicionais.
Evite definir uma classe que contenha apenas membros estáticos.
Evite chamadas de métodos ou acessos a propriedades em um alvo dynamic.
Evite sobrescrever operator == e hashCode em classes que não estão marcadas com @immutable.
Evite escapar aspas internas trocando as aspas que envolvem a string.
Evite inicializadores de campo em classes const.
Evite usar forEach com um function literal.
Não inicialize variáveis explicitamente com null.
Não declare várias variáveis em uma única linha.
Não verifique null em operadores == personalizados.
Evite imports relativos para arquivos em lib/.
Não renomeie parâmetros de métodos sobrescritos.
Evite retornar null de membros cujo tipo de retorno é bool, double, int ou num.
Evite retornar this de métodos apenas para habilitar uma interface fluente.
Evite sombrear parâmetros de tipo.
Evite cascade simples em instruções de expressão.
Evite
Evite tipos como nomes de parâmetros.
Evite anotar tipos em parâmetros de expressões de função.
Evite sobrescrever um campo final para retornar valores diferentes se for chamado várias vezes.
Evite definir parâmetros não utilizados em construtores.
Evite usar bibliotecas exclusivas da web fora dos pacotes de plugin web do Flutter.
Não converta (cast) um valor anulável para um tipo não anulável.
Referencie apenas identificadores no escopo em comentários de documentação.
Prefira usar lowerCamelCase para nomes de constantes.
FAÇA usar chaves em todas as estruturas de controle de fluxo.
Anexe comentários de documentação de biblioteca às diretivas library.
Dependa dos pacotes referenciados.
Evite usar elementos descontinuados dentro do pacote em que são declarados.
FAÇA referenciar todas as propriedades públicas em métodos de debug.
Siga as convenções de ordenação de diretivas do Guia Effective Dart.
Não deve haver chamadas que retornam Future em funções síncronas, a menos que sejam atribuídas ou retornadas.
Use ; em vez de {} para corpos de construtores vazios.
Defina cláusulas case para todas as constantes em tipos semelhantes a enum.
Nomeie arquivos-fonte usando lowercase_with_underscores.
Use o formato de TODO do Flutter: // TODO(username): mensagem, https://URL-da-issue.
Sempre sobrescreva hashCode ao sobrescrever ==.
Não importe arquivos de implementação de outro pacote.
Faça tear-off explícito de métodos call ao usar um objeto como Function.
Inicialize o campo no inicializador do próprio campo.
Evite testes de tipo em tempo de execução com tipos de interop JS quando o resultado pode não ser consistente entre plataformas.
As condições não devem avaliar incondicionalmente para true ou para false.
Comece strings multilinha com uma quebra de linha.
Anexe anotações de biblioteca às diretivas de biblioteca.
Use lowercase_with_underscores ao especificar um prefixo de biblioteca.
Evite usar tipos privados em APIs públicas.
Widgets de design devem ser importados dos pacotes Material ou Cupertino.
Um bloco de código não tem a linguagem especificada.
Falta de espaço em branco entre strings adjacentes.
Não use mais de um case com o mesmo valor.
Evite sublinhados iniciais em prefixos de biblioteca.
Evite sublinhados iniciais em identificadores locais.
Não compare expressões booleanas com literais booleanos.
Não use parâmetros ou variáveis curinga.
Nomeie identificadores não constantes usando lowerCamelCase.
Não use verificação de null em um parâmetro de tipo potencialmente anulável.
Não passe null como argumento onde se espera uma closure.
Omita anotações de tipo óbvias para variáveis locais.
Omita anotações de tipo óbvias para variáveis de nível superior e estáticas.
Evite definir uma classe abstrata com um único membro quando uma função simples basta.
Prefixe os nomes de bibliotecas com o nome do pacote e um caminho separado por pontos.
Use strings adjacentes para concatenar literais de string.
Prefira colocar asserts em listas de inicializadores.
Use literais de coleção quando possível.
Prefira usar ??= em vez de testar por null.
Prefira declarar construtores const em classes @immutable.
Prefira literais const como parâmetros de construtores em classes @immutable.
Prefira definir construtores em vez de métodos estáticos para criar instâncias.
Prefira aspas duplas quando elas não exigirem sequências de escape.
Use = para separar um parâmetro nomeado do seu valor padrão.
Use => para membros curtos cujo corpo é uma única instrução return.
Prefira final na variável do laço for-each se a referência não for reatribuída.
Prefira final nas declarações de variáveis se elas não forem reatribuídas.
Prefira final nas declarações de parâmetros se eles não forem reatribuídos.
Prefira elementos for ao construir mapas a partir de iteráveis.
Use uma declaração de função para vincular uma função a um nome.
Prefira aliases de tipo de função genéricos.
Prefira elementos if a expressões condicionais sempre que possível.
Use parâmetros formais de inicialização quando possível.
Declare itens de lista inline sempre que possível.
Use interpolação para compor strings e valores.
Prefira usar whereType em iteráveis.
Use aspas duplas apenas para strings que contenham aspas simples.
Use coleções com spread quando possível.
Prefira tipar variáveis e campos não inicializados.
Não use o tipo Null, a menos que tenha certeza de que não quer void.
Forneça uma mensagem de depreciação, via @Deprecated("message").
O getter de propriedade retorna a si mesmo recursivamente.
Use vírgulas finais em todas as listas de parâmetros e de argumentos.
Evite nomes de membros desnecessários em padrões de variáveis.
Prefira usar /// para comentários de documentação.
Ordene as propriedades child por último nas criações de instâncias de widgets.
Ordene as declarações de construtores antes dos outros membros.
Ordene primeiro as declarações de construtores sem nome.
Especifique anotações de tipo não óbvias para variáveis locais.
Especifique anotações de tipo não óbvias para variáveis de nível superior e estáticas.
Coloque a chamada de super por último na lista de inicialização de um construtor.
Restrinja o tipo do parâmetro formal de inicialização.
Não anote o tipo de parâmetros formais de inicialização.
Não use padrões constantes com literais de tipo.
Resultados Future em corpos de funções async devem ter await ou ser marcados como
unawaited usando dart:async.
O uso de colchetes angulares em um comentário de documentação é tratado como HTML pelo Markdown.
Evite usar chaves na interpolação quando não forem necessárias.
Não use const explícito em um construtor generativo de enum.
Nome de construtor .new desnecessário.
Evite encapsular campos em getters e setters só por "segurança".
Não especifique o modificador late quando ele não for necessário.
Evite diretivas de biblioteca, a menos que tenham comentários de documentação ou anotações.
Não tenha nome de biblioteca em uma declaração library.
Evite null em atribuição null-aware.
Operador null-aware desnecessário em extensão sobre um tipo anulável.
Evite usar null nos operadores ??.
Use um tipo não anulável para uma variável final inicializada com um valor não anulável.
Não sobrescreva um método apenas para chamar o método da superclasse com os mesmos parâmetros.
Corpos de construtor primário desnecessários podem ser removidos.
Remova barras invertidas desnecessárias em strings.
Interpolação de string desnecessária.
Não acesse membros com this, a menos que seja para evitar sombreamento.
Use 'this' diretamente em vez de atribuí-lo a uma variável local.
Não use um nome de tipo explícito em um construtor.
Sublinhados desnecessários podem ser removidos.
Membros de nível superior inalcançáveis em bibliotecas executáveis.
Tipo inseguro: possui uma variável de tipo em uma posição não covariante.
Não use BuildContext através de lacunas assíncronas.
Prefira um inteiro hexadecimal de 8 dígitos (por exemplo, 0xFFFFFFFF) para instanciar um Color.
Use a sintaxe de tipo de função genérica para parâmetros.
Use operadores ?? para converter nulls em bools.
Prefira intValue.isOdd/isEven em vez de verificar o resultado de % 2.
Use late para membros privados com tipo não anulável.
Elementos if que testam null podem ser substituídos por elementos null-aware.
Use rethrow para relançar uma exceção capturada.
Use um setter para operações que conceitualmente alteram uma propriedade.
Use string em diretivas part of.
Use parâmetros de inicializador de super sempre que possível.
Comece o nome do método com to/_to ou as/_as, quando aplicável.
Evite declarar parâmetros com var e sem anotação de tipo.
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Página atualizada pela última vez em 2026-11-12. Ver código-fonte ou relatar um problema.
Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.