Migrando seu projeto flutter para null-safety

André Augusto Dutra
Senior Mega
Published in
4 min readApr 29, 2021

Você já ouviu falar sobre null-safety?

O null-safety é uma feature liberada na versão 2.12 do dart que irá auxiliar o desenvolvedor no controle e validação de valores nulos de seus objetos e variáveis.

Por que utilizar null-safety?

Quando criamos uma variável de determinado tipo, ela pode ter um valor do tipo definido ou ser nula. Desta forma se não validarmos a variável antes de utiliza-la, corremos o risco de ter uma exceção, pois não temos a garantia do valor que a variável possui.

Utilizando o null-safety temos mais segurança e evitamos esse tipo de problema, pois por padrão as variáveis não serão nulas e nem poderão receber valores nulos, assim não sendo necessário realizar validações e evitando o risco de ter exceções geradas.

Vantagens de utilizar null-safety

  • Validação de variáveis nulas agora são feitas em tempo de codificação e não mais em execução, ou seja, se uma variável receber um valor nulo, o projeto não será compilado.
  • Temos a garantia que uma variável de determinado tipo terá aquele tipo.
  • Evitamos diversas exceções que podem ocorrer por conta de valores nulos.
  • Possível ganho de performance e builds menores.
  • Código nativo do dart menor e mais rápido, pois não precisa adicionar verificações de nulos.
  • Não temos mais a necessidade de validar valores nulos.

Migração para null-safety

Antes de começar a migração, precisamos atualizar o flutter e os pacotes do nosso projeto.

Atualizar o flutter para a última versão estável liberada.

Verificar se todas as packages utilizadas no projeto são compatíveis com null-safety.

Atualizar para a última versão compatível com null-safety.

Após concluir os passos acima e corrigir eventuais problemas causados pela atualização das packages, chegou a hora de realizarmos a migração do projeto.

Existe 2 formas de migrar seu projeto para null-safety.

  1. Utilizando a ferramenta de migração disponibilizada pelo dart.
  2. Manualmente.

Ferramenta de migração

A migração realizada através da ferramenta é bem simples e realiza a conversão do código de forma automática.

Executar o comando abaixo.

O seu código será analisado e será gerado um link onde será possível consultar todas as alterações necessárias em seu código.

Através do link gerado você pode selecionar as classes que deseja migrar e clicar em Apply Migration.

Executar a migração através da ferramenta é bem rápido, porém dependendo da estrutura de seu projeto, o que ela faz é adicionar “?” no tipo das variáveis. E isso diz para o dart que essa variável pode ser nula, mas não é isso que queremos, pois assim o mesmo problema continua.

Caso aconteça isso em seu projeto, o melhor é executar a migração manualmente.

Manualmente

O processo de migração manual é mais demorado dependendo do tamanho do seu projeto, mas o resultado obtido no final será muito melhor, pois você terá um controle muito maior das alterações e será possível tratar cada caso individualmente da melhor forma.

Alterar a versão do SDK no arquivo pubspec.yaml.

Execute o comando para baixar as packages atualizadas.

Será exibido na IDE todos os problemas encontrados por conta da incompatibilidade com null-safety. Agora basta começar a ajustar os problemas apontados.

A migração manual será diferente para cada projeto, porém abaixo segue algumas dicas de como seguir com os ajustes necessários.

Dicas para a migração manual

  • Não se assuste com a quantidade de erros que serão apresentados.
  • Comece a migração pelo nível mais baixo (Que não possui dependências de outras classes).
Classe C depende da classe B que depende da classe A.
Comece a migração pela classe A, depois B e por fim C.
  • Sempre inicialize as variáveis no momento da criação.
  • Evite utilizar variáveis nulas, mas caso precise que uma determinada variável possa ser nula, adicione “?” após o tipo dela.
  • Para dizer ao dart que uma variável criada com “?” não está mais nula, adicione “!” após o nome dela. Lembrando que caso a variável esteja nula no momento da utilização, uma exceção poderá ser gerada.
  • Caso precise criar uma variável não nula, mas não pode instanciar/inicializar ela no momento da criação, utilize o atributo late, assim será possível instanciar/inicializar em outro momento. Cuidado com esta opção, pois se utilizar a variável sem instanciar/inicializar ela, uma exceção poderá ser gerada.
  • Os models sempre devem ter construtores com os campos não nulos e não inicializados.

Migração Gradativa

É possível migrar seu projeto de forma gradativa, porém os benefícios do null-safety serão aplicados apenas quando o projeto estiver 100% migrado.

Caso opte por migrar desta forma, dois pontos deverão ser observados.

  • A versão do sdk deverá ser alterada apenas quando 100% do projeto for migrado.
  • Atributos como “?”, “!” e “late” não iram funcionar antes de alterar a versão do sdk.

Conclusão

Aí estão algumas dicas de como migrar seu projeto para null-safety. O trabalho pode ser grande, mas acredito que vale a pena, vendo que podemos evitar diversas exceções e validações necessárias por conta de valores nulos.

Referências

https://flutter.dev/docs/null-safety

https://dart.dev/null-safety/migration-guide

https://medium.com/flutter/null-safety-flutter-tech-preview-cb5c98aba187

--

--