World of Warcraft (WoW) Collector
Een Simpele Android-App voor het Opzoeken van World of Warcraft Mounts
Waarom heb ik het gemaakt? Ik heb deze app ontwikkeld als een manier om met Flutter te beginnen, een framework waar ik al een tijdje mee wilde werken. Ik zocht naar een project dat eenvoudig maar betekenisvol genoeg was, en het maken van een app waarmee World of Warcraft-spelers hun verzamelde mounts kunnen opzoeken, leek perfect.
Hoe werkt het? De app maakt verbinding met de WoW API van Blizzard om de mount-collectie van een speler te tonen, samen met enkele profielgegevens. Het werkt als volgt:
Bij het laden van de app wordt een splashscreen weergegeven terwijl essentiële gegevens worden opgehaald.
Op het volgende scherm kan de gebruiker zijn profielinformatie invoeren (regio, realm en personagenaam). Om dit te vergemakkelijken, heb ik de EU-realms vooraf geladen en slaat de app ook eerdere succesvolle zoekopdrachten op voor later gebruik.
Zodra de informatie is ingevuld en gevalideerd, zoekt de app naar het personage. Als het personage wordt gevonden, haalt het de mount-collectie op en slaat deze op in de cache. Zo niet, dan verschijnt er een foutmelding.
Het laatste scherm toont de mounts in een kaartweergave. Gebruikers kunnen wisselen tussen hun eigen mounts en een volledige lijst, waarbij hun verzamelde mounts gemarkeerd zijn. Elk mount kan worden aangeklikt om een detailscherm te openen met een afbeelding en de beschikbare informatie. Aangezien Blizzard beperkte data biedt, heb ik een directe link naar Wowhead toegevoegd voor meer informatie.
Wat heb ik geleerd? Werken met Flutter was een prettige ervaring. In vergelijking met mijn eerdere werk met React Native merkte ik dat ik dingen sneller kon bouwen met Flutter. Eén van mijn doelen voor dit project was prestatieoptimalisatie, dus ik heb ervoor gezorgd dat API-antwoorden werden gecachet om onnodige verzoeken te verminderen.
Het beheren van afbeeldingen was een uitdaging, aangezien er meer dan 1.000 mount-afbeeldingen zijn. Om de app niet te zwaar te maken en laadtijden te beperken, schreef ik een Python-script dat de afbeeldingen ophaalde, verkleinde en omzette naar base64-formaat. Deze afbeeldingen, samen met de bijbehorende metadata, werden opgeslagen in een JSON-bestand binnen de app, zodat deze licht en snel bleef.
Hoewel deze aanpak werkt, is het niet ideaal voor langdurig onderhoud. Elke keer dat er nieuwe mounts of items worden toegevoegd, zou het bestand handmatig moeten worden bijgewerkt. Voor een robuustere oplossing zou ik een lichtgewicht database zoals SQLite hebben gebruikt om statische gegevens op te slaan. Maar aangezien dit slechts een persoonlijk project was om Flutter te leren kennen, voldeed de huidige aanpak.
Een ander punt waar ik de volgende keer verder naar zou kijken, is de kwaliteit van de api. In de korte tijd dat ik aan deze app heb gewerkt, is de api meerdere keren dagen uitgevallen. Dit heeft problemen veroorzaakt bij het publiceren naar de google play store.