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)