Pular para o conteúdo principal

avoid_futureor_void

Detalhes sobre o diagnóstico 'avoid_futureor_void' produzido pelo analisador do Dart.

Don't use the type 'FutureOr'.

Descrição

#

O analisador emite este diagnóstico quando o tipo FutureOr<void> é usado como o tipo de um resultado (para ser preciso: é usado em uma posição que não é contravariante). O tipo FutureOr<void> é problemático porque pode parecer codificar que um resultado é um Future<void>, ou que o resultado deve ser descartado (quando é void). No entanto, não há uma forma segura de detectar qual dos dois casos ocorreu, porque uma expressão do tipo void pode resultar em qualquer objeto, inclusive um future de qualquer tipo.

Também é conceitualmente incorreto ter um tipo cujo significado seja algo como "ignore este objeto; além disso, veja, porque ele pode ser um future".

Há uma exceção para ocorrências contravariantes do tipo FutureOr<void> (por exemplo, para o tipo de um parâmetro formal), e nenhum aviso é emitido para essas ocorrências. O motivo 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, há uma exceção para declarações de alias de tipo, porque elas podem muito bem ser usadas em uma posição contravariante (por exemplo, como o tipo de um parâmetro formal). Por isso, em declarações de alias de tipo, somente os limites dos parâmetros de tipo são verificados.

Exemplo

#
dart
import 'dart:async';
​
FutureOr<void> m() => null;

Correções comuns

#

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

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

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