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 constcujo 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:
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:
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:
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:
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');
}
}
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
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ê.