exhaustive_ cases
Saiba mais sobre a regra de lint exhaustive_cases.
Defina cláusulas case para todas as constantes em tipos semelhantes a enum.
Detalhes
#
Usar switch sobre instâncias de tipos semelhantes a enum deve cobrir todas as constantes conhecidas.
Tipos semelhantes a enum são classes ou extension types que têm:
- apenas construtores privados não-factory
- dois ou mais campos
static constcujo tipo é o tipo que os contém
Além disso, classes semelhantes a enum são concretas (não abstratas) e não têm subclasses na biblioteca que as define.
FAÇA defina cláusulas case para todas as constantes em tipos semelhantes a enum.
Extension types também podem ser semelhantes a enum:
extension type const E._(int value) {
static const E a = E._(1);
static const E b = E._(2);
}
void f(E e) {
switch (e) { // LINT
case E.a:
print('a');
}
}
RUIM:
class EnumLike {
final int i;
const EnumLike._(this.i);
static const e = EnumLike._(1);
static const f = EnumLike._(2);
static const g = EnumLike._(3);
}
void bad(EnumLike e) {
// Missing case.
switch(e) { // LINT
case EnumLike.e :
print('e');
break;
case EnumLike.f :
print('f');
break;
}
}
BOM:
class EnumLike {
final int i;
const EnumLike._(this.i);
static const e = EnumLike._(1);
static const f = EnumLike._(2);
static const g = EnumLike._(3);
}
void ok(EnumLike e) {
// All cases covered.
switch(e) { // OK
case EnumLike.e :
print('e');
break;
case EnumLike.f :
print('f');
break;
case EnumLike.g :
print('g');
break;
}
}
Ativar
#
Para ativar a regra exhaustive_cases, adicione exhaustive_cases em
linter > rules no seu arquivo analysis_options.yaml:
linter:
rules:
- exhaustive_cases
Se você usa a sintaxe de mapa YAML para configurar as regras de lint,
adicione exhaustive_cases: true em linter > rules:
linter:
rules:
exhaustive_cases: true
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ê.