Flutter app voor het plannen van een nood hoogspanningstraject
Flutter is het framework waar wij onze apps in ontwikkelen. Hoe uitdagend of complex het ontwikkelen van de app ook is, Flutter biedt ons en jou als klant wat nodig is voor een goed presterende app. Zo hebben wij onlangs een verouderde Windows applicatie vervangen door een voor iPad geoptimaliseerde nieuw ontwikkelde app, met nieuw toegevoegde features en verbeteringen in gebruiksvriendelijkheid en beheer. In deze blog lees je hoe wij dit technisch met behulp van Flutter hebben aangepakt en welke uitdagingen hierbij kwamen kijken.
De mogelijkheden van de app
De werking van de app is uitvoerig omschreven in de case. In het kort komt het erop neer dat de app het mogelijk maakt om een traject uit te zetten van tijdelijke hoogspanningsmasten, die bestaan uit een variabel aantal delen (voor de hoogte) en worden gezekerd met scheerlijnen. Het complete traject moet hierbij uiteraard aan verschillende veiligheidsvereisten voldoen. Denk hierbij aan de maximale doorhanging van de geleiders, de minimale en maximale afstand tussen masten en natuurlijk de maximale krachten die elke mast kan weerstaan van de scheerlijnen, geleiders en tijdens verschillende weersomstandigheden. De juiste berekeningen zijn hierbij van essentieel belang, voor ons de grootste uitdaging waar wij ons in vastgebeten hebben.
Uitdaging 1: berekeningen
In de originele applicatie zijn heel veel berekeningen, formules en controles ingericht. Deze berekeningen, formules en controles moeten ook in de nieuwe app kloppen. Om ervoor te zorgen dat de controles op basis van berekeningen gelijk zouden blijven aan de originele applicatie, hebben we toegang gekregen tot de originele broncode van het project. Dit maakte het voor ons mogelijk om de berekeningen op dezelfde wijze te doen als in de oude applicatie. Alleen dan wel merkbaar sneller op een iPad. In plaats van een aantal seconden wachten op de berekening, is dit in de nieuwe applicatie al in een aantal milliseconden klaar, wat voor de gebruiker zeer plezierig is.
De originele berekeningen waren geschreven in een oude versie van Fortran. Dit is een programmeertaal die vaker gebruikt wordt voor wiskundige berekeningen, echter lastig te doorgronden voor developers met ervaring in modernere programmeertalen. Vooral het werkend krijgen van deze code (zodat we konden compileren en debuggen) en het begrijpen van de code bleek een flinke uitdaging te zijn. Dit vanwege een wirwar aan subroutines, goto statements en globale variabelen. Toch is het ons gelukt om de functionaliteit van de originele code in Dart na te bouwen. Dart is de programmeertaal die wij gebruiken voor het ontwikkelen van onze apps (met het framework Flutter). De berekeningen hebben we los van de rest van de app als een module ontwikkeld. Op deze manier is er altijd nog de optie om dezelfde berekeningen los aan te roepen in bijvoorbeeld een web frontend, door de Dart code te compileren naar js.
Uitdaging 2: gebruik van offline kaarten
Een belangrijke usecase die voor de oude applicatie niet toepasbaar was en nu wel binnen bereik kwam, is het gebruiken van de app op de locatie waar de installatie plaats gaat vinden. Dit maakt het mogelijk voor de gebruiker om ter plaatse kleine aanpassingen te doen op basis van bevindingen tijdens het installeren. Met de mogelijkheid om zelf de kaart te importeren. Om dit voor elkaar te krijgen was het wel noodzakelijk om de app ook offline te kunnen gebruiken. Dit omdat hoogspanningsmasten zich internationaal ook in afgelegen gebieden bevinden waar geen internet beschikbaar is.
Een app ook offline beschikbaar maken is in principe niet ingewikkeld om in te richten. Echter, zoals te zien op het screenshot, tonen we het traject op de kaart van de omgeving waar deze gebouwd wordt. Normaal gesproken gebruiken wij voor dit soort kaarten (bijvoorbeeld zoals in de case van de Circulus app) altijd Google Maps. Helaas was dit in dit geval niet mogelijk, aangezien Google Maps geen offline mogelijkheid biedt. Wanneer je online bent cached Google Maps wel de kaartdata, maar je kunt als programmeur geen kaartdata voorladen en beschikbaar maken voor offline gebruik. Wij zijn toen op zoek gegaan naar een alternatief en kwamen uiteindelijk uit op Mapbox. We slaan per project informatie op waarmee we bepalen over welke regio een traject loopt, met een ruime marge. Wanneer een project geladen / gedownload wordt vanuit onze backoffice, zorgen we ervoor dat Mapbox ook direct de kaartdata download, zodat alles wat we nodig hebben ook offline beschikbaar is.
De kaart is interactief, in de zin dat het mogelijk is om masten te verplaatsen, verplaatsen en wijzigen door erop te tikken. De kaart weet dus precies waar de masten staan en stelt ons in staat om op basis van verschillende interacties, zoals tikken en slepen, te bepalen wat er moet gebeuren. Onderaan de kaart zie je een zijaanzicht van het traject, waardoor je snel ziet welke hoogtes de masten bereiken en wat de verwachte doorhanging is van de geleiders.
De kracht van Dart
Flutter is een prettig framework om mee te werken en Dart vult met zijn krachtige programmeertaal en goede aanvulling hierop. Hierdoor was de basis van de app vlot opgezet. Het gebruik van Mapbox was voor ons nieuw, maar dankzij duidelijke documentatie en best practices in de manier waarop Flutter werkt, konden we hier al snel mee werken en onze eigen uitbreidingen toevoegen voor het tekenen van het traject.
Ook bij het omzetten van de Fortran berekeningen naar Dart is gebleken dat Dart een zeer capabele programmeertaal is. Ook voor het doen van wiskundige berekeningen! Voor sommige berekeningen hadden we extra packages buiten de standaard library van Dart nodig. Bijvoorbeeld voor de ondersteuning van complexe getallen. De performance van Dart overtreft ook tijdens deze case weer onze verwachtingen. Een berekening van een traject wordt voor de gebruiker gevoelsmatig realtime uitgevoerd, hierdoor krijg je een goed werkende responsive app, waar de gebruiker blij mee is en waar hij op kan vertrouwen.
Wil je meer informatie over Flutter en waarom wij met dit framework werken? Lees dan onderstaande blogs:
Welkom in de wereld van Flutter
Flutter: de voordelen, de uitdagingen en de toekomst
Een afval app recyclen, hoe doe je dat?
Nieuw jasje zorgt voor optimale gebruiksvriendelijkheid
We zijn bij BOLD® trots op dit prachtige project, waarbij we een aantal mooie uitdagingen zijn tegengekomen. Een belangrijke applicatie voor DNV is vernieuwd naar een moderne codebase en platform. De app wordt onderhouden en up-to-date gehouden, waardoor het voor DNV weer mogelijk is om de app te optimaliseren met nieuwe features. Een applicatie van meer dan 20 jaar oud heeft een mooie nieuwe jas aan gekregen, waardoor hij weer jaren mee gaat en waaraan doorontwikkeld kan worden.
Het zelf importeren van een afbeelding van de kaart om daar het noodtraject vervolgens op uit te tekenen is voor de gebruiker nu verleden tijd. Net als het uitprinten van een rapport met daarin alle details voor degenen die de masten gingen plaatsen. De gebruiksvriendelijkheid is er flink op vooruit gegaan. De gebruikers zien nu direct op de betreffende locatie welk traject daar mogelijk is op basis van verschillende omstandigheden. Alle wordt direct gepland op basis van bestaande kaartdata, met duidelijke lengte en breedte graden, zodat ieder traject goed en veilig geplaatst kan worden.