Actualització d'un projecte Legacy en Flutter: Un cas de guerra

Ens enfrontem al repte d'actualitzar un projecte Flutter amb més de 60 dependències obsoletes. Descobreix pas a pas com vam abordar aquest procés, els problemes que vam trobar i les estratègies que vam utilitzar per modernitzar l'aplicació sense trencar-la en l'intent.

21.02.2025 — Edu Molins — 4 min read
Legacy code

L'Estat inicial: Diagnostic del pacient

El diagnòstic inicial va revelar múltiples punts crítics:

  • Versió de Flutter: 1.22.0
  • Més de 60 dependències, moltes deprecades
  • Versió de Java obsoleta
  • Pods d’iOS desactualitzats
  • Warnings per tot arreu
  • Codi deprecat en ús actiu

Fase 1: Anàlisi i Preparació

1.1 Anàlisi d'impacte

Abans de submergir-nos en l'actualització, era crucial entendre completament a què ens enfrontàvem. Vam dedicar una setmana sencera a analitzar el projecte en profunditat. Durant aquesta fase, vam completar les següents tasques crítiques:

  • Vam realitzar un inventari complet de dependències
  • Vam identificar les funcionalitats crítiques
  • Vam crear una suite de tests de regressió
  • Vam fer còpia de seguretat de tot en una branca separada
1.2 Documentació de l'estat actual

La documentació es va convertir en el nostre salvavides durant tot el procés. Vam establir un sistema rigorós de documentació que incloïa:

  • Captures de pantalla de totes les pantalles principals
  • Llista de funcionalitats crítiques
  • Registre de comportaments específics que s'havien de mantenir
  • Mapatge de fluxos d'usuari complets

Fase 2: Actualització base

2.1 Actualització de l'entorn de desenvolupament

L'actualització de l'entorn de desenvolupament va ser el nostre primer gran repte. Aquest procés va requerir una seqüència específica de passos que vam executar acuradament:

  • Actualització de Flutter a la darrera versió estable:
  • flutter upgrade
    flutter channel stable
    flutter doctor
  • Actualització de Java, assegurant la compatibilitat amb els plugins natius existents
  • Actualització de Xcode i CocoaPods:
  1. pod repo update
    pod update
2.2 Primera ronda de dependències

El procés d'actualització de dependències va ser com desactivar una bomba: cada cable tallat podia desencadenar una reacció en cadena. Vam abordar aquest repte amb un pla estructurat:

  • Actualització del pubspec.yaml amb les noves versions compatibles
  • Resolució de conflictes entre dependències interdependents
  • Identificació i substitució de paquets obsolets

Fase 3: La guerra de les dependències

3.1 Estratègia d'actualització per capes

Vam adoptar un enfocament sistemàtic, actualitzant les dependències en el següent ordre:

  1. Dependències core:
    • Client HTTP
    • Gestió d'estat
    • Sistema de navegació
  2. Dependències UI:
    • Widgets personalitzats
    • Biblioteques de components
    • Temes i estils
  3. Dependències funcionals:
    • Integracions amb APIs
    • Gestió de dades locals
    • Funcionalitats específiques del negoci
  4. Eines de suport:
    • Analytics
    • Informes d'errors
    • Monitoratge de rendiment
3.2 Problemes comuns trobats

Durant el procés ens vam enfrontar a diversos reptes tècnics que van requerir solucions creatives:

Els principals obstacles van incloure:

  • Conflictes de versions entre paquets interdependents
  • Breaking changes en APIs populars
  • Incompatibilitats amb noves versions d'iOS/Android
  • Mètodes obsolets sense alternatives directes

Fase 4: Refactorització i modernització

4.1 Actualitzacions de codi

La modernització del codi base va requerir diversos canvis fonamentals:

  1. Migració a null safety: Un procés que vam realitzar mòdul a mòdul, assegurant l'estabilitat en cada pas.
  2. Actualització de widgets: Vam identificar i reemplaçar components obsolets pels seus equivalents moderns, millorant tant la funcionalitat com el rendiment.
  3. Patrons i pràctiques: Vam implementar les últimes pràctiques recomanades per l'equip de Flutter, incloent:
    • Ús de nous widgets de plataforma
    • Implementació de nous patrons d'estat
    • Optimització de la construcció de widgets
4.2 Millores d'arquitectura

En aquesta fase vam aprofitar per realitzar millores arquitectòniques significatives:

  • Separació clara de responsabilitats utilitzant Clean Architecture
  • Implementació de gestió d'estat moderna
  • Optimització de la navegació i gestió de rutes
  • Millora en la gestió de recursos i assets
Legacy code2

Fase 5: Testing i validació

La fase de testing va ser crítica però vam mantenir un enfocament pragmàtic, centrant-nos en els aspectes més importants per garantir l'estabilitat de l'aplicació després de l'actualització.

5.1 Pla de proves

Ens vam centrar en verificar que les funcionalitats core continuessin funcionant correctament:

  • Proves manuals dels fluxos principals d'usuari
  • Verificació d'integració amb APIs externes
  • Validació de formularis i processos crítics
  • Testing específic en àrees més afectades per les actualitzacions
5.2 Monitoratge de rendiment

Vam realitzar comprovacions bàsiques però essencials:

  • Comprovació de temps de càrrega en diferents seccions
  • Verificació de la mida final de l'aplicació
  • Testing en diferents dispositius i versions d'OS

Lliçons apreses i recomanacions finals

L'experiència ens va deixar valuoses lliçons que han transformat la nostra aproximació al manteniment d'aplicacions Flutter:

  1. Documentació com a prioritat: Mantenir registres detallats de cada decisió i canvi realitzat.
  2. Actualització gradual: No intentar actualitzar-ho tot de cop, sinó procedir per fases ben definides.
  3. Testing continu: Els tests automatitzats són fonamentals per detectar problemes d'hora.
  4. Comunicació clara: Mantenir el client informat dels progressos i reptes trobats.

Conclusió

L'actualització d'un projecte legacy en Flutter pot semblar aclaparadora, però amb una estratègia ben planificada i una execució metòdica, és possible modernitzar fins i tot els projectes més antics. La clau està en mantenir un equilibri entre la necessitat d'actualitzar i l'estabilitat del sistema existent.

Si et trobes davant d'un repte similar amb el teu projecte Flutter i necessites ajuda professional per actualitzar-lo o modernitzar-lo, el nostre equip pot ajudar-te. Comptem amb l'experiència i metodologia provada per portar la teva aplicació al següent nivell de manera segura i eficient 🚀.

💡 Quant costa desenvolupar una app per al teu negoci? Descobreix els preus