Benjamín Moraga
open main menu
Part of series: portfolio-projects

MiniWeather – Minimalist Weather App in Flutter

/ 3 min read
Last updated:

🌦️ MiniWeather – Minimalist Weather App in Flutter

MiniWeather is a weather application built with Flutter.
Its main purpose is not to compete in the weather app market, but to serve as a portfolio project that showcases my technical approach and the different skills I have developed as a mobile developer.


🎯 Origin of the Idea

The idea of creating MiniWeather came from a clear goal: to demonstrate my skills in Flutter.
I wanted a project that would allow me to apply different aspects of mobile development, such as Clean Architecture, state management, data persistence, and integration with external services.

MiniWeather is completely free and has no ads, because its aim is to present a convincing and professional result, not a commercial product.


🛠️ Technical Decisions

  • Flutter as the framework
    I chose Flutter because it is intuitive, enjoyable to use, and compiles natively for multiple platforms (Android, iOS, Windows, etc.).
    Unlike React Native, which uses a bridge, or Kotlin/Swift which require maintaining two separate projects, Flutter allowed me to develop a robust, cross-platform app with a single codebase.

  • Clean Architecture
    I implemented Clean Architecture since it was the approach I learned Flutter with, and it keeps the project structured and scalable.
    Separating configuration, domain, and presentation layers makes the code easier to maintain and extend.

  • Riverpod for state management
    I selected Riverpod for its robustness and flexibility. It is an evolution of Provider (created by the same author) and simpler to adopt than BLoC, which is often better suited for larger-scale apps.

  • WeatherAPI as the data provider
    I initially tried OpenMeteo but switched to WeatherAPI for its greater stability.
    Its free plan includes a personal API key, which ensures faster and more reliable responses compared to services that don’t require authentication.

  • SharedPreferences for persistence
    Local storage in MiniWeather is limited to basic settings (such as the temperature unit °C/°F) and the last recorded weather data, so users can still check it offline.
    SharedPreferences was the ideal choice for its simplicity and efficiency.


⚙️ Development and Challenges

The biggest challenge was orchestrating the data flow: managing location permissions, retrieving coordinates, making the API request, storing the response locally, and finally displaying it on the UI.
This process highlighted the importance of state management, and I particularly enjoyed creating and organizing the different providers (for permissions, local storage, weather data, etc.).

I also had to learn how to work with geolocation from scratch, including handling permissions and retrieving coordinates, which was an important learning experience in this project.


🚀 Final Result

The result is a minimalist weather application that shows:

  • Current weather based on the user’s location.
  • Hourly forecast (up to 48 hours).
  • 3-day forecast (limited by the free API plan).
  • Automatic adaptation to the device’s light/dark theme.

MiniWeather is simple to use, visually clean, and free of cluttered data displays.

Beyond being a functional app, it represents a solid example of my development approach: elegant, minimalist, and technically sound solutions.


🔗 Repository: GitHub - MiniWeather
📱 Download: Playstore - MiniWeather