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:
Subindo as dependências
O próprio Flutter sugere que atualizemos primeiro as dependências em ordem para depois atualizar as aplicações.
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.
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 get funciona também, porém prefiro upgrade por ser mais verboso.
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).
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:
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:
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 !!









Top comments (0)