Null Safety | Nullable | Dart | Flutter
- Null Safety | Nullable | Dart | Flutter
🧠 O que é “nullable”?
Em Dart, null safety é um recurso que ajuda a evitar erros comuns de tempo de execução, como o famoso null reference exception. Variáveis nullable são aquelas que podem conter null como valor.
Antes do null safety:
Dart permitia que qualquer variável tivesse valor null, o que causava muitos problemas.
A partir do Dart 2.12 (null safety):
Você precisa declarar explicitamente quando uma variável pode ser null.
✅ Como declarar tipos nullable
Para declarar um tipo como nullable, adicione um ? após o tipo:
String? nome; // Pode ser null ou String
int? idade; // Pode ser null ou int
Sem o ?, a variável deve ser não-nula:
String nome = 'Ana'; // Nunca pode ser null
❗ Acesso seguro a membros de variáveis nullable
Como você pode acessar métodos e propriedades de variáveis que podem ser null?
1. Operador de acesso seguro (?.)
String? nome;
print(nome?.length); // null (sem erro)
2. Operador de coalescência (??)
Retorna um valor padrão se a variável for null.
String? nome;
print(nome ?? 'Desconhecido'); // "Desconhecido"
3. Operador de coalescência de atribuição (??=)
Atribui valor se a variável for null.
String? nome;
nome ??= 'Default';
❓ Verificação de nulidade
Antes de acessar membros, verifique se o valor é diferente de null:
if (nome != null) {
print(nome.length); // OK, Dart sabe que não é null aqui
}
💥 Forçando não-nulidade (!)
Use ! para dizer ao Dart que a variável nunca será null naquele ponto:
String? nome;
print(nome!.length); // Cuidado! Crasha se nome == null
Use apenas se você tiver 100% de certeza de que não será null.
🧩 Nullable em classes
class Pessoa {
String nome;
int? idade; // idade pode ser null
Pessoa(this.nome, [this.idade]);
}
🔍 Exemplo completo
void main() {
String? nome;
// nome = "Carlos";
// Safe access
print('Tamanho: ${nome?.length}');
// Default value
print('Nome: ${nome ?? "Sem nome"}');
// Forçar não-null (risky!)
// print('Forçado: ${nome!.length}'); // Runtime error se nome == null
}
🧠 Boas práticas
- Evite usar
!sempre que possível. - Prefira usar
??,?.e verificações explícitas. - Modele corretamente seus dados: se algo pode não existir, use nullable.
- Se deveria sempre existir, não use nullable.