Mobile App Development · Dart/Flutter
O conjunto de regras do Dart que evita erros de valores nulos inesperados: tipos nullable, os operadores ??, ?. e !, promoção de tipo e late.
Nesta aula você vai entender por que o Dart não aceita null por padrão, como declarar tipos nullable com ?, como fornecer valores padrão com ??, acessar membros com segurança usando ?., aproveitar a promoção de tipo depois de um if (valor != null), usar o operador ! com responsabilidade e adiar inicializações com late.
String vs String?
Por padrão, uma variável não aceita null. Adicionar ? ao tipo cria um tipo nullable diferente, que pode conter null.
??
Operador de coalescência nula: retorna o valor à esquerda se não for nulo, ou o valor à direita como alternativa.
?.
Acesso seguro: chama um método ou lê uma propriedade apenas se o valor não for nulo; caso contrário, a expressão inteira retorna null.
Depois de um if (valor != null), o Dart trata a variável como não-nullable dentro do bloco, sem precisar de ?. ou !.
!
Afirma ao compilador que o valor não é nulo naquele ponto. Se estiver errado, lança um erro em tempo de execução — use com cautela.
late
Indica que uma variável não-nullable será inicializada antes do primeiro uso, mesmo que não seja no construtor.
// Demonstração combinada de null safety em Dart.
void main() {
// String? declara uma variável que pode ser String ou null.
String? apelido;
// ?? fornece um valor padrão quando 'apelido' for nulo.
print('Apelido: ${apelido ?? 'Sem apelido'}');
// Busca um nome que pode ou não existir.
String? nome = buscarNome(incluirNome: true);
// Promoção de tipo: dentro do if, 'nome' é tratado como String (não-nullable).
if (nome != null) {
print('Nome em maiusculas: ${nome.toUpperCase()}');
} else {
print('Nome nao informado');
}
// ?. acessa toUpperCase() apenas se 'nome' não for nulo.
print('Acesso seguro: ${nome?.toUpperCase()}');
}
// Retorna uma String se 'incluirNome' for true, ou null caso contrário.
String? buscarNome({required bool incluirNome}) {
return incluirNome ? 'ana' : null;
}
Apelido: Sem apelido Nome em maiusculas: ANA Acesso seguro: ANA
?? para definir um valor padrão quando uma variável for nula.?. para acessar um método de uma variável que pode ser nula.if (valor != null) e aproveite a promoção de tipo dentro do bloco.! somente depois de validar explicitamente que o valor não é nulo.late inicializado fora do construtor.