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 usada, isso nos dará tranquilidade para resolver apenas problemas relacionados à atualização do Flutter.

Motivação

A aplicação exemplo é 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 null safety está relacionada com outros projetos que interagem com o POC.

Montando o experimento

Montamos um fluxo na aplicação funcionando, esperando 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 consulta 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:

Login

Consulta Flag

Subindo as dependências

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

ordem de atualização de deps

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.

Exemplo de versão de pacote

Além disso, vamos atualizar a versão do Flutter e do Dart SDK 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 ferramenta do dart para resolver as dependências:

dart pub upgrade

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

dart pub upgrade

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

dart pub upgrade

dart migrate

dart migrate

na raiz do projeto vai fornecer 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).

dart migrate falha

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:

dart migrate sucesso

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 experimentos em outro post), logo abrimos pull request.

Objetivo alcançado !!

Oldest comments (0)