Null-Safety no Dart
Se você está aprendendo Dart e ainda não compreendeu bem a questão do null-safety, eu acredito que com essa explicação ficará mais simples!
2022-12-08 20:13:43 - Carlos Batista
Null-Safety é uma maneira de controlar o que pode ser null e o que não pode ser.
Atenção
Se você quer permitir que uma variável receba um valor *null*, basta adicionar um "?" na frente da tipagem, como isto:
String? nome;
A variável nome inicia como *null* e também pode receber esse valor quando quiser, agora vamos usa-lá.
String? nome; print(nome); // Output: null
Existe algumas expressôes que podemos usar, entre elas estão:
- ?? ( Recebe um valor do lado direito caso o esquerdo seja null )
- ! ( Afirma que uma variável que pode ser null não é contém null )
- ??= ( Atribui um valor a uma variável caso ela seja null )
Vamos aos exemplos, digamos que eu queira mostrar algo caso nome seja null, eu faria algo como:
String? nome; print(nome ?? 'Nenhum nome foi informado'); // Output: Nenhum nome foi informado
E se eu quissese afirmar que a variável nome tem algum valor que é diferente de null?
String? nome; print(nome!); // Output: Uncaught TypeError: Cannot read properties of null (reading 'toString')Error: TypeError: Cannot read properties of null (reading 'toString')
Pois é! Daria um erro, isso porque nós mentimos, a variável nome era null mas nós afirmamos que não era, por isso que deu erro, o "!" é muito bom quando você quer dizer que tem certeza que uma variável não é null:
String? nome; nome = "Carlos"; // Supondo que em algum momento eu fiz isso. print(nome!); // Output: Carlos
Mas e se eu quiser mudar a variável apenas se ela for null?
Simples:
String? nome; nome ??= "Carlos"; print(nome); // Output: Carlos
Viu como é simples?
Então você pode fazer isso com String, int, bool, e por ai vai...
Até em funções, veja exemplos:
// Não temos a chance de retornar um null aqui String obterNome() { return "Nome"; }
Eu posso usar a função obterNome sem medo de receber um null
String? tentarObterNome() { final now = DateTime.now(); if (now.day == 1) { return "Carlos"; } return null; }
Já aqui temos uma regra, o nome só será retornado caso seja dia um do mês.
---
É isso... espero que tenha ajudado o pessoal do Dart