Filip Hracek publicou esta semana artigo sobre a introdução de “null safety” no site do Dart reforçando o “Announcing Dart 2.8” feito pelo Michael Thomsen que já abordava “Breaking changes paving the way for null safety” no início de maio corrente.

Poderia ser somente mais um dos vários artigos que ele traz de contribuição, mas não é.

Seu código vai bugar

Dart é uma linguagem planejada para ser “type-safe” o que significa que uma variável uma vez declarada com um tipo não pode sofrer mutação ao longo da sua vida. Filip relata o que nós sentimos no dia-a-dia, que um número muito grande de “issues” são causados por “nulls” no Dart. Com o plano de introduzir “Null Safety” a alteração irá deixar o compilador mais robusto ao checar em tempo de compilação se houve alguma violação de regra e lá pelo milésima linha foi atribuído um “null” para a variável.

Buscando solução, está nos planos no team incluir como padrão a checagem de “null safety”, ou seja, código anteriores que não observarem a nova regra irá parar de compilar.

Nem tudo foi perdido

Pensando que em alguns casos realmente o desejado seja a possibilidade da variável vir a receber “null” a algum tempo, o time cria um nova anotação nas variáveis / parâmetros para indicar que poderá receber “null” como valor ao longo da sua existência.

Exemplos:

double? valor = 0;  /// indica que variável valor poderá receber "null"

ou

double outro = 0;  /// variável não poderá receber "null" 

O mesmo se aplica aos parâmetros de funções/métodos – podendo receber “?” para indicar que podem receber valor “null”… ou se não for indicado – não poderá.

...
mostrar( String? texto ){
   ....
}

String? pegarValor()=>xxxx;   // aceita "null" como resposta

Transição – planejada

A previsão é que até o final do ano a implementação esteja concluída, então este período será necessário que as “package” e aplicativos planejem a alteração e teste, ainda que não há recomendação de uso em produção no momento – se bem que no “channel beta” que utilizo já esta avisando sobre pontos de quebra do código por conta de “nulls”.

O esperado no momento é que a versão estável virá como padrão não aceitar “null” por padrão, então é bom ficar atentos.