Pular para o conteúdo principal

exhaustive_cases

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

Missing case clauses for some constants in '{0}'.

Descrição

#

O analisador emite este diagnóstico quando uma instrução switch sobre uma instância de um tipo semelhante a enum não tem uma cláusula case para uma ou mais constantes do tipo e não tem uma cláusula default.

Tipos semelhantes a enum são classes ou extension types que têm:

  • Apenas construtores privados e que não são de fábrica.
  • Dois ou mais campos static const cujo tipo é o tipo que os contém.

Além disso, uma classe semelhante a enum deve ser não abstrata e não ter subclasses na biblioteca que a define.

Exemplo

#

O código a seguir gera este diagnóstico porque a instrução switch não tem uma cláusula case para a constante C.c:

dart
class const C._(final int i) {
  static const C a = ._(1);
  static const C b = ._(2);
  static const C c = ._(3);
}
​
void f(C c) {
  switch (c) {
    case .a:
      print('a');
    case .b:
      print('b');
  }
}

Extension types também podem ser semelhantes a enum. O código a seguir gera este diagnóstico porque a instrução switch não tem uma cláusula case para a constante E.b:

dart
extension type const E._(int value) {
  static const E a = ._(1);
  static const E b = ._(2);
}
​
void f(E e) {
  switch (e) {
    case .a:
      print('a');
  }
}

Correções comuns

#

Se a constante que falta precisa ser tratada separadamente, então adicione uma cláusula case para ela:

dart
class const C._(final int i) {
  static const C a = ._(1);
  static const C b = ._(2);
  static const C c = ._(3);
}
​
void f(C c) {
  switch (c) {
    case .a:
      print('a');
    case .b:
      print('b');
    case .c:
      print('c');
  }
}

Se a constante que falta não precisa ser tratada de forma especial, então adicione uma cláusula default para cobri-la:

dart
class const C._(final int i) {
  static const C a = ._(1);
  static const C b = ._(2);
  static const C c = ._(3);
}
​
void f(C c) {
  switch (c) {
    case .a:
      print('a');
    case .b:
      print('b');
    default:
      print('other');
  }
}

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