Skip to main content

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.