Pular para o conteúdo principal

avoid_futureor_void

Saiba mais sobre a regra de lint avoid_futureor_void.

Experimental
Lançado no Dart 3.6

Evite usar 'FutureOr' como tipo de um resultado.

Detalhes

#

EVITE usar FutureOr<void> como tipo de um resultado. Esse tipo é problemático porque pode parecer codificar que um resultado é um Future<void> ou que o resultado deve ser descartado (quando é void). Porém, não há forma segura de detectar qual dos dois casos ocorreu (porque uma expressão de tipo void pode avaliar para qualquer objeto, inclusive um future de qualquer tipo).

Também é conceitualmente incoerente ter um tipo cujo significado seja algo como "ignore este objeto; além disso, dê uma olhada, porque pode ser um future".

É feita uma exceção para ocorrências contravariantes do tipo FutureOr<void> (por exemplo, o tipo de um parâmetro formal), e nenhum aviso é emitido para essas ocorrências. A razão dessa exceção é que o tipo não descreve um resultado; ele descreve uma restrição sobre um valor fornecido por outros. De forma semelhante, é feita uma exceção para declarações de alias de tipo, porque elas podem muito bem ser usadas em posição contravariante (por exemplo, como o tipo de um parâmetro formal). Portanto, em declarações de alias de tipo, apenas os limites dos parâmetros de tipo são verificados.

Um substituto para o tipo FutureOr<void> que costuma ser útil é Future<void>?. Esse tipo codifica que o resultado é ou um Future<void> ou null, e não há ambiguidade em tempo de execução, já que nenhum objeto pode ter os dois tipos.

Nem sempre é possível usar Future<void>? como substituto de FutureOr<void>, porque o último é supertipo de todos os tipos, e o primeiro não é. Nesse caso, pode ser útil substituir FutureOr<void> pelo tipo void.

RUIM:

dart
FutureOr<void> m() {...}

BOM:

dart
Future<void>? m() {...}

Esta regra é experimental. Ela está em avaliação e pode ser alterada ou removida. Feedback sobre o comportamento é bem-vindo! O principal issue relacionado é dart-lang/sdk#59292.

Ativar

#

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

analysis_options.yaml
yaml
linter:
  rules:
    - avoid_futureor_void

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

analysis_options.yaml
yaml
linter:
  rules:
    avoid_futureor_void: 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ê.