non_ constant_ case_ expression_ from_ deferred_ library
Detalhes sobre o diagnóstico 'non_constant_case_expression_from_deferred_library' produzido pelo analisador do Dart.
Constant values from a deferred library can't be used as a case expression.
Descrição
#
O analisador emite este diagnóstico quando a expressão em uma cláusula case
referencia uma constante de uma biblioteca importada usando um import deferred.
Para que instruções switch sejam compiladas de forma eficiente, as constantes
referenciadas nas cláusulas case precisam estar disponíveis em tempo de
compilação, e constantes de bibliotecas deferred não estão disponíveis em tempo
de compilação.
Para mais informações, veja carregamento preguiçoso de uma biblioteca.
Exemplo
#Dado um arquivo a.dart que define a constante zero:
const zero = 0;
O código a seguir gera este diagnóstico porque a biblioteca a.dart é importada
usando um import deferred, e a constante a.zero, declarada na biblioteca
importada, é usada em uma cláusula case:
import 'a.dart' deferred as a;
void f(int x) {
switch (x) {
case a.zero:
// ...
break;
}
}
Correções comuns
#
Se você precisar referenciar a constante da biblioteca importada, então remova a
palavra-chave deferred:
import 'a.dart' as a;
void f(int x) {
switch (x) {
case a.zero:
// ...
break;
}
}
Se você precisar referenciar a constante da biblioteca importada e também precisar
que a biblioteca importada seja deferred, então reescreva a instrução
switch
como uma sequência de instruções if:
import 'a.dart' deferred as a;
void f(int x) {
if (x == a.zero) {
// ...
}
}
Se você não precisar referenciar a constante, então substitua a expressão do
case:
void f(int x) {
switch (x) {
case 0:
// ...
break;
}
}
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ê.