In mei 2017 betrad Flutter het toneel van mobiele app-ontwikkeling met een alpha-release, en het was al vlak erna dat onze collega Michiel zich erin verdiepte, nieuwsgierig naar de mogelijkheden ervan voor TodayTomorrow. Alleen zoals vaak het geval is, is er maar één manier om echt te begrijpen wat een technologie kan: door er daadwerkelijk mee aan de slag te gaan. Dus besloot hij een Flutter-app te ontwikkelen met als doel een bot aan te sturen om een koektrommel te openen. De toepassing was niet direct een commercieel succes (iets met niche), maar de eerste test voor Flutter als technologie was geslaagd.
In die tijd maakten we veel gebruik van Ionic/Cordova voor het bouwen van hybride mobiele applicaties. Cordova is een open-source framework dat het mogelijk maakt om mobiele apps te ontwikkelen met behulp van web-technologieën zoals HTML, CSS en JavaScript, en deze vervolgens te verpakken als native apps voor verschillende platforms. Ionic, gebouwd bovenop Cordova, biedt een uitgebreide set van UI-componenten en tools om de ontwikkeling te versnellen en een consistent uiterlijk en gedrag te bieden op diverse mobiele apparaten. Met Ionic/Cordova konden we als ontwikkelaars dus efficiënt mobiele apps bouwen die kunnen draaien op zowel iOS als Android met behoud van een uniforme codebase.
Daarnaast maakten we vaak gebruik gebruik van een plugin ‘cordova-hot-code-push’, waarmee we de mobiele apps buiten de app stores om konden bijwerken. Dit maakte een enorm verschil in de iteratie snelheid, want op deze manier konden we met wijzigingen aan één codebase razendsnel automatisch nieuwe deployments uitrollen voor alle platformen. Deze snelle release cycle stelde ons in staat om bij nieuw gelanceerde producten direct in te kunnen spelen op feedback vanuit de markt. Deze setup heeft ons veel succes bracht bij verschillende startups en projecten. Dat de performance van mobiele apps gebouwd met Cordova’s webview minder was in vergelijking met native apps, namen we voor lief.
Na verloop van tijd ontstonden echter uitdagingen bij het onderhouden van dependencies. Plugins raakten snel verouderd en het was een behoorlijke puzzel om alle dependencies compatibel te houden bij updates of vervangingen. Daarnaast ontstond er een risico, met name bij Apple, of het nog lang zou worden toegestaan om mobiele apps buiten de app stores bij te werken. We hielden onze ogen open voor alternatieve technologieën…
In deze zoektocht kwamen React Native en Flutter naar voren. React Native deelde echter vergelijkbare uitdagingen op het gebied van updates en performance, terwijl Flutter een veelbelovende ontwikkelaarservaring bood met o.a. hot code refresh. Bovendien zou Flutter een flinke sprong voorwaarts betekenen op het gebied van performance dankzij de aangepaste renderengine, resulterend in vloeiendere animaties en snellere UI-rendering. Een kans die we niet onbenut wilden laten om verder te onderzoeken.
Ondanks dat we aanvankelijk terughoudend waren om deze opkomende technologie in zo’n vroeg stadium aan te bevelen voor klantprojecten kwam er toch een project langs dat perfect leek om Flutter voor het eerst uit te proberen: Astmakompas. Dit kwam vooral doordat we persoonlijk betrokken waren bij het project, met een minderheidsaandeel in het bedrijf. Bovendien leende de aard van de applicatie zich goed voor Flutter; het betrof een mobiele app die patiënten moest aanmoedigen om wekelijks een vragenlijst in te vullen, waarbij een naadloze en gebruiksvriendelijke ervaring cruciaal was. Na een zorgvuldige afweging van de kansen en risico’s met onze compagnon hebben we besloten om de sprong te wagen.
We hebben bewust de meest complexe aspecten (zoals state management en logica voor verschillende build environments) naar voren geschoven, omdat we verwachtten dat we hier mogelijk tegen problemen zouden aanlopen. Op deze manier zouden we snel eventuele struikelblokken kunnen identificeren om potentieel nog van koers te wijzigen. Lees in Max zijn blog “3 months with Flutter” meer gedetailleerd over hoe deze uitdagingen werden aangepakt en uiteindelijk werden overwonnen. Nadat we deze obstakels hadden overwonnen, kregen we het vertrouwen om een Flutter app voor productiedoeleinden te ontwikkelen.
De ontwikkelervaring en prestaties overtroffen ruimschoots onze verwachtingen, en dit werd niet alleen bevestigd door ons team, maar ook door onze compagnon, die nu samen met ons Flutter-apps ontwikkelt voor andere klanten. Dit benadrukt de positieve ontwikkelervaring met Flutter. Ons ontwerpteam is eveneens enthousiast, omdat Flutter’s prestaties weinig beperkingen kennen en ruimte bieden voor het creëren van een rijke UI-ervaring.