Pular para o conteúdo principal

non_exhaustive_switch_expression

Detalhes sobre o diagnóstico 'non_exhaustive_switch_expression' 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 expressão switch 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 expressão switch não tem um caso para o valor E.three:

dart
enum E { one, two, three }
​
String f(E e) => switch (e) {
  E.one => 'one',
  E.two => 'two',
};

Correções comuns

#

Se os valores que faltam tiverem um significado distinto para a expressão switch, então adicione um caso para cada um dos valores que não têm correspondência:

dart
enum E { one, two, three }
​
String f(E e) => switch (e) {
  E.one => 'one',
  E.two => 'two',
  E.three => 'three',
};

Se os valores que faltam não precisarem ser correspondidos, então adicione um padrão curinga que retorne um valor padrão simples:

dart
enum E { one, two, three }
​
String f(E e) => switch (e) {
  E.one => 'one',
  E.two => 'two',
  _ => 'unknown',
};

Esteja ciente de que um padrão curinga vai tratar quaisquer valores adicionados ao tipo no futuro. Você perde a capacidade de o compilador avisar que o switch precisa ser atualizado para considerar novos tipos.

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