avoid_ futureor_ void
Saiba mais sobre a regra de lint avoid_futureor_void.
Evite usar 'FutureOr
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:
FutureOr<void> m() {...}
BOM:
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:
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:
linter:
rules:
avoid_futureor_void: true
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ê.