Pular para o conteúdo principal

non_exhaustive_switch_statement

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

The enum '{0}' isn't exhaustively matched by the switch cases because some of the enum constants are private.

The type '{0}' isn't exhaustively matched by the switch cases since it doesn't match the pattern '{1}'.

Descrição

#

O analisador emite este diagnóstico quando uma instrução switch sobre um tipo exaustivo não tem um caso para um ou mais dos valores possíveis que podem passar por ela.

Exemplo

#

O código a seguir gera este diagnóstico porque a instrução switch não tem um caso para o valor E.three, e E é um tipo exaustivo:

dart
enum E { one, two, three }
​
void f(E e) {
  switch (e) {
    case E.one:
    case E.two:
  }
}

Correções comuns

#

Adicione um caso para cada uma das constantes que não estão sendo correspondidas no momento:

dart
enum E { one, two, three }
​
void f(E e) {
  switch (e) {
    case E.one:
    case E.two:
      break;
    case E.three:
  }
}

Se os valores que faltam não precisarem ser correspondidos, então adicione uma cláusula default ou um padrão curinga:

dart
enum E { one, two, three }
​
void f(E e) {
  switch (e) {
    case E.one:
    case E.two:
      break;
    default:
  }
}

Mas esteja ciente de que adicionar uma cláusula default ou um padrão curinga fará com que quaisquer valores futuros do tipo exaustivo também sejam tratados. Assim, você perde a capacidade de o compilador avisar que o switch precisa ser atualizado.

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