Pular para o conteúdo principal

invalid_null_aware_operator

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

The element can't be null, so the null-aware operator '?' is unnecessary.

The map entry key can't be null, so the null-aware operator '?' is unnecessary.

The map entry value can't be null, so the null-aware operator '?' is unnecessary.

The receiver can't be 'null' because of short-circuiting, so the null-aware operator '{0}' can't be used.

The receiver can't be null, so the null-aware operator '{0}' is unnecessary.

Descrição

#

O analisador produz este diagnóstico quando um operador null-aware (?., ?.., ?[, ?..[ ou ...?) é usado em um receptor que se sabe ser não anulável.

Exemplos

#

O código a seguir produz este diagnóstico porque s não pode ser null:

dart
int? getLength(String s) {
  return s?.length;
}

O código a seguir produz este diagnóstico porque a não pode ser null:

dart
var a = [];
var b = [...?a];

O código a seguir produz este diagnóstico porque s?.length não pode retornar null:

dart
void f(String? s) {
  s?.length?.isEven;
}

O motivo pelo qual s?.length não pode retornar null é que o operador null-aware depois de s faz um curto-circuito na avaliação tanto de length quanto de isEven se s for null. Em outras palavras, se s for null, nem length nem isEven serão invocados, e se s não for null, então length não pode retornar um valor null. De qualquer forma, isEven não pode ser invocado em um valor null, então o operador null-aware não é necessário. Veja Entendendo o null safety para mais detalhes.

O código a seguir produz este diagnóstico porque s não pode ser null.

dart
void f(Object? o) {
  var s = o as String;
  s?.length;
}

O motivo pelo qual s não pode ser null, apesar de o poder ser null, é o cast para String, que é um tipo não anulável. Se o tiver o valor null, o cast falhará e a invocação de length não acontecerá.

O código a seguir produz este diagnóstico porque s não pode ser null:

dart
List<String> makeSingletonList(String s) {
  return <String>[?s];
}

Correções comuns

#

Substitua o operador null-aware por um equivalente que não seja null-aware; por exemplo, troque ?. por .:

dart
int getLength(String s) {
  return s.length;
}

(Observe que o tipo de retorno também foi alterado para não anulável, o que pode não ser apropriado em alguns casos.)

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