DEV Community

João Pedro Gonçalves
João Pedro Gonçalves

Posted on

Atualizando aplicação Flutter para null safe - exemplo prático

Não comece errado

Antes de tudo tenho que saber que minha aplicação funciona na versão sem null safety que estou usando, isso no dará tranquilidade para resolver apenas problemas relacionados à atualização do Flutter.

Motivação

A aplicação alvo é o POC https://github.com/GeoSales-Evolution/unleash-multi-tenant-flutter-poc.

Estávamos usando o Flutter 1.22.2 para rodá-la, e agora queremos mudar para 2.5.0. O porquê dessa escolha além do uso do no null safe está relacionada com outros projetos que se interagem com o POC.

Montando o experimento

No caso montamos um fluxo na aplicação funcionando e o esperado é que após a migração para a 2.5.0 a aplicação funcione da mesma maneira.

No fluxo:
Usuário entra com Login e Tenant > é levado a tela de sonsulta de flags > digita um flag ativa > recebe a string 'flag ativa? == true' no console do terminal.
Essa flags são Feature Flags de um projeto no GitLab.

Abaixo prints do fluxo funcionando:

Image description

Image description

Subindo as dependências

O próprio Flutter sugere que atualizemos primeiro as dependências em ordem para depois atualizar as aplicações.

Image description

Como não temos nenhum subprojeto como dependência do nosso app vamos direto ao seu pubspec.yaml, observamos as versões dos pacotes(packages) usados e procuramos no https://pub.dev/ quais versões estão disponíveis com o nosso Flutter e Dart SDK almejados.

Por exemplo: path_provider: está na versão ^1.6.28 e podemos observar na sua página de versões path_provider que uma versão que tem null safety e atende no Dart SDK 14(Flutter 2.5.0) pode ser a 2.0.0.

Image description

Além disso, vamos atualizar a versão do Flutter e do Dart SDK no no pubspec.yaml, no nosso caso 2.5.0 e 2.14.0 respectivamente.

Dart pub upgrade

Depois decididas todas as mudanças de versões das dependências usamos uma ferramente altomatizado do dart para resolver as dependências:

dart pub upgrade

Se houver alguma incompatibilidade entre as dependências o Dart vai avisar.

Image description

dart pub get funciona também, porém prefiro upgrade por ser mais verboso.

Image description

dart migrate

dart migrate

na raiz do projeto vai fornce um relatório de problemas a serem corrigidos.

Nós esperamos dois tipos de erros: adequação ao null safety e quebra de APIs(causadas por mudanças nas APIs das dependências depois de atualizações).

Image description

Concertamos os problemas com null safety e adaptamos o código para as novas APIs das dependências. Conforme o tamanho do seu projeto esse vai ser o passo mais demorado.

Então rodamos dart migrate novamente e esperamos ver:

Image description

Rodar aplicação atualizada

flutter run

deve funcionar normalmente depois das alterações e mostrar uma mensagem:

💪 Running with sound null safety 💪

Nos resta testar a aplicação. Nesse caso estou considerando o fluxo do experimento que definimos anteriormente, e ele funcionou sem falhas conforme a captura abaixo:

flutter run

O experimento não encontrou evidências de que a aplicação contém defeito(quem sabe a discussão sobre como usar experimento em outro post), logo abrimos pull request.

Valeu !

Top comments (0)