World of Warcraft (WoW) Collector

FlutterAPIPerformance

A Simple Android App for World of Warcraft Mounts Lookup

Why did I create it? I developed this app as an introduction to Flutter, a framework I had been eager to explore. I wanted a manageable yet meaningful project to get started with, and creating an app that allows World of Warcraft players to look up their owned mounts seemed like the perfect fit.

How does it work? The app connects to Blizzard's WoW API to display a player's mount collection along with some profile information. Here's the basic flow:

  • When the app loads, it displays a splash screen while essential data is fetched.

  • The next screen prompts the user to enter their profile information (region, realm, and character name). To streamline this process, I preloaded the EU realms, and the app also stores successful searches for quick access in the future.

  • Once the information is entered and validated, the app looks up the character. If found, it fetches and caches the mount collection. Otherwise, an error is displayed.

  • The final screen displays the mounts in a card-based layout. Users can toggle between viewing their owned mounts and a full list where their mounts are highlighted. Each mount can be clicked to open a detailed page with an image and the available data. Since Blizzard provides limited data, I included a direct link to Wowhead for more detailed information.

What did I learn? Working with Flutter was a smooth and enjoyable experience. Compared to my previous work with React Native, I found that I could build things faster with Flutter. One of my goals for this project was to optimize performance, and I focused on caching API responses to reduce unnecessary requests.

Managing images was another challenge, given that there are over 1,000 mount images. To avoid bloating the app and slow load times, I wrote a Python script to fetch, resize, and convert the images to base64 format. These, along with relevant metadata, were saved in a JSON file within the app to keep it lightweight and performant.

However, I recognize that this approach isn’t ideal for long-term maintenance. Every time new mounts or items are added to the game, the file would need to be manually updated. For a more robust solution, I would have used a lightweight database like SQLite to store static data. But since this was just a personal project to learn Flutter, the current approach was sufficient.

Another point i'd look further into next time is the quality of the api, in the short time since i've worked on this app, the api went down several times for days since. This has been causing issues for publishing it to the google play store.