not_ assigned_ potentially_ non_ nullable_ local_ variable
Detalhes sobre o diagnóstico 'not_assigned_potentially_non_nullable_local_variable' produzido pelo analisador do Dart.
The non-nullable local variable '{0}' must be assigned before it can be used.
Descrição
#O analisador emite este diagnóstico quando uma variável local é referenciada e possui todas estas características:
- Tem um tipo potencialmente não anulávelPotentially non-nullableUm tipo que é non-nullable explicitamente ou por ser um parâmetro de tipo. Saiba mais.
- Não tem inicializador.
- Não está marcada como
late. - O analisador não consegue provar que a variável local será atribuída antes da referência, com base na especificação de atribuição definitivaDefinite assignmentA determinação de se uma variável recebeu com certeza um valor antes de ser usada. Saiba mais.
Exemplos
#
O código a seguir produz este diagnóstico porque x não pode ter um valor
null, mas é referenciada antes de receber um valor atribuído:
String f() {
int x;
return x.toString();
}
O código a seguir produz este diagnóstico porque a atribuição a x pode não
ser executada, então ela pode ter o valor null:
int g(bool b) {
int x;
if (b) {
x = 1;
}
return x * 2;
}
O código a seguir produz este diagnóstico porque o analisador não consegue
provar, com base na análise de atribuição definitiva, que x não será
referenciada sem que um valor tenha sido atribuído a ela:
int h(bool b) {
int x;
if (b) {
x = 1;
}
if (b) {
return x * 2;
}
return 0;
}
Correções comuns
#Se null for um valor válido, então torne a variável anulável:
String f() {
int? x;
return x!.toString();
}
Se null não for um valor válido, e houver um valor padrão razoável, então
adicione um inicializador:
int g(bool b) {
int x = 2;
if (b) {
x = 1;
}
return x * 2;
}
Caso contrário, garanta que um valor foi atribuído em todos os caminhos possíveis do código antes de o valor ser acessado:
int g(bool b) {
int x;
if (b) {
x = 1;
} else {
x = 2;
}
return x * 2;
}
Você também pode marcar a variável como late, o que remove o diagnóstico,
mas se a variável não receber um valor antes de ser acessada, então uma
exceção é lançada em tempo de execução. Essa abordagem só deve ser usada se
você tiver certeza de que a variável sempre será atribuída, mesmo que o
analisador não consiga provar isso com base na análise de atribuição
definitiva.
int h(bool b) {
late int x;
if (b) {
x = 1;
}
if (b) {
return x * 2;
}
return 0;
}
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ê.