Pular para o conteúdo principal

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:

dart
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:

dart
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:

dart
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:

dart
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:

dart
void f(int x) {
  switch (x) {
    case 0:
      // ...
      break;
  }
}

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