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
#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.
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. 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ê.