Pular para o conteúdo principal

null_closures

Saiba mais sobre a regra de lint null_closures.

Estável
Recomendado
Correção disponível

Não passe null como argumento onde se espera uma closure.

Detalhes

#

NÃO FAÇA passe null como argumento onde se espera uma closure.

Muitas vezes, uma closure passada para um método só será chamada condicionalmente, de modo que os testes e as chamadas do "caminho feliz" em produção não revelam que null resultará em uma exceção.

Esta regra só detecta literais null passados onde closures são esperadas nos seguintes locais:

Construtores

#
  • De dart:async
    • Future no 0º parâmetro posicional
    • Future.microtask no 0º parâmetro posicional
    • Future.sync no 0º parâmetro posicional
    • Timer no 0º parâmetro posicional
    • Timer.periodic no 1º parâmetro posicional
  • De dart:core
    • List.generate no 1º parâmetro posicional

Funções estáticas

#
  • De dart:async
    • scheduleMicrotask no 0º parâmetro posicional
    • Future.doWhile no 0º parâmetro posicional
    • Future.forEach no 0º parâmetro posicional
    • Future.wait no parâmetro nomeado cleanup
    • Timer.run no 0º parâmetro posicional

Métodos de instância

#
  • De dart:async
    • Future.then no 0º parâmetro posicional
    • Future.complete no 0º parâmetro posicional
  • De dart:collection
    • Queue.removeWhere no 0º parâmetro posicional
    • `Queue.retain
    • Iterable.firstWhere no 0º parâmetro posicional, e no parâmetro nomeado orElse
    • Iterable.forEach no 0º parâmetro posicional
    • Iterable.fold no 1º parâmetro posicional
    • Iterable.lastWhere no 0º parâmetro posicional, e no parâmetro nomeado orElse
    • Iterable.map no 0º parâmetro posicional
    • Iterable.reduce no 0º parâmetro posicional
    • Iterable.singleWhere no 0º parâmetro posicional, e no parâmetro nomeado orElse
    • Iterable.skipWhile no 0º parâmetro posicional
    • Iterable.takeWhile no 0º parâmetro posicional
    • Iterable.where no 0º parâmetro posicional
    • List.removeWhere no 0º parâmetro posicional
    • List.retainWhere no 0º parâmetro posicional
    • String.replaceAllMapped no 1º parâmetro posicional
    • String.replaceFirstMapped no 1º parâmetro posicional
    • String.splitMapJoin nos parâmetros nomeados onMatch e onNonMatch

RUIM:

dart
[1, 3, 5].firstWhere((e) => e.isOdd, orElse: null);

BOM:

dart
[1, 3, 5].firstWhere((e) => e.isOdd, orElse: () => null);

Ativar

#

Para ativar a regra null_closures, adicione null_closures em linter > rules no seu arquivo analysis_options.yaml:

analysis_options.yaml
yaml
linter:
  rules:
    - null_closures

Se você usa a sintaxe de mapa YAML para configurar as regras de lint, adicione null_closures: true em linter > rules:

analysis_options.yaml
yaml
linter:
  rules:
    null_closures: true

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