Pular para o conteúdo principal

no_default_cases

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

Invalid use of 'default' member in a switch.

Descrição

#

O analisador emite este diagnóstico quando uma instrução switch sobre um valor de enum ou sobre uma instância de uma classe semelhante a enum tem uma cláusula default.

Classes semelhantes a enum são classes não abstratas que têm:

  • Apenas construtores privados e que não são factory.
  • Dois ou mais campos static const cujo tipo é a classe que os envolve.
  • Nenhuma subclasse na biblioteca que a define.

Exemplos

#

O código a seguir gera este diagnóstico porque a instrução switch sobre o valor do enum e tem uma cláusula default:

dart
enum E { a, b, c }
​
void f(E e) {
  switch (e) {
    case .a:
      print('a');
    default:
      print('other');
  }
}

O código a seguir gera este diagnóstico porque a instrução switch sobre c, uma instância da classe semelhante a enum C, tem uma cláusula default:

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');
    default:
      print('other');
  }
}

Correções comuns

#

Se o valor for um valor de enum, substitua a cláusula default por cláusulas case para os valores do enum que ainda não são tratados:

dart
enum E { a, b, c }
​
void f(E e) {
  switch (e) {
    case .a:
      print('a');
    case .b:
    case .c:
      print('other');
  }
}

Se o valor for uma instância de uma classe semelhante a enum, substitua a cláusula default por cláusulas case para as constantes que ainda não são tratadas:

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:
    case .c:
      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ê.