Your smart, free, and ad-free weather companion!
HordricWeather is a modern and elegant weather app built with Flutter, providing accurate forecasts, intelligent alerts, air quality monitoring, and a customizable widget. Completely free, ad-free, and respectful of your privacy.
(Screenshots coming soon)
- Real-time GPS-based forecasts
- Current and feels-like temperature
- Humidity, atmospheric pressure
- Wind speed and direction
- Detailed hourly forecasts
- 5-day forecasts
- Automatic updates every 30 minutes
- Extreme weather notifications (heatwave, cold, storms, high winds)
- Sudden temperature change alerts (>5Β°C)
- Hourly forecasts for imminent rain/snow/storms
- Daily weather at 8:00 AM
- Anti-spam system with cooldowns (2h for changes, 6h for alerts)
- Real-time AQI index (scale 1-5)
- Pollutant details (PM2.5, PM10, NO2, O3, SO2, CO)
- Personalized health advice based on quality
- Automatic updates
- Clothing recommendations based on weather
- Adapted activity suggestions
- Health advice based on air quality
- Weather widget on home screen
- Modern and clean design
- Automatic updates every 30 minutes
- Display: temperature, humidity, wind, conditions
- Elegant design with blue/cyan gradients
- Smooth animations (flutter_animate)
- Animated weather icons
- Integrated dark mode
- Intuitive navigation
- Add multiple favorite cities
- Quickly switch between your locations
- Forecasts for all your saved cities
- Enable/disable notifications
- Configure alerts according to your needs
- Manage widget and updates
- Reset your data
- Access privacy policy
- No data sent to our servers
- 100% local storage (SharedPreferences)
- No ads, no trackers
- Secure communications (HTTPS)
- GDPR and CCPA compliant
- Data deletion at any time
lib/
βββ main.dart : Application entry point
β
βββ core/ : Reusable base code
β βββ constants/
β β βββ constants.dart : Global constants (colors, API key)
β βββ config/
β βββ app_initializer.dart : App initialization and routing
β
βββ features/ : Features by domain
β βββ home/ : Weather home page
β β βββ pages/
β β β βββ home_page.dart : Main screen with current weather
β β βββ widgets/
β β βββ weather_item.dart : Reusable weather item widget
β β
β βββ weather/ : Weather details
β β βββ pages/
β β βββ detail_page.dart : Detailed hourly forecasts page
β β
β βββ settings/ : Settings and configuration
β β βββ pages/
β β βββ settings_page.dart : Settings and notifications page
β β βββ privacy_policy_page.dart : Privacy policy
β β
β βββ advice/ : Personalized advice
β β βββ pages/
β β βββ advice_page.dart : Weather advice + air quality
β β
β βββ onboarding/ : First-time use
β βββ pages/
β βββ get_started_page.dart : Startup screen with animated logo
β βββ welcome_page.dart : Favorite city selection
β βββ user_onboarding_page.dart : User onboarding
β
βββ shared/ : Shared resources
βββ models/
β βββ city.dart : City data model (2600+ cities)
β
βββ services/ : Business services
β βββ notification_service.dart : Push notifications management
β βββ background_service.dart : Background service (updates)
β βββ weather_widget_service.dart : Native Android widget service
β βββ user_service.dart : User management and preferences
β βββ location_service.dart : GPS geolocation
β βββ air_quality_service.dart : Air quality API
β βββ clothing_advice_service.dart : Smart clothing recommendations
β βββ daily_advice_service.dart : Daily advice service
β
βββ widgets/ : Shared widgets
βββ app_logo.dart : Reusable animated logo
assets/
βββ Logo.png : Main HordricWeather logo
βββ clear.png, clouds.png, rain.png... : Weather condition icons
βββ [other assets] : UI icons (humidity, wind, etc.)
android/
βββ app/
β βββ build.gradle : Android build configuration
β βββ upload-keystore.jks : Play Store signing key
β βββ src/main/res/
β βββ layout/ : Android widget layouts
β βββ xml/ : Widget configuration
β βββ mipmap-*/ : Launcher icons (hdpi to xxxhdpi)
βββ key.properties : Keystore properties (not versioned)
HordricWeather follows the Feature-First architecture recommended by Flutter:
core/: Global configuration and constantsfeatures/: Features organized by business domain (home, weather, settings, etc.)shared/: Reusable code (models, services, common widgets)
This structure facilitates:
- π¦ Project scalability
- π§ͺ Unit and integration testing
- π₯ Team collaboration
- π Maintenance and evolution
- Flutter : 3.32.8 or higher
- Dart : 3.8.1 or higher
- IDE: A configured code editor like VS Code with the Flutter extension or Android Studio
- Git: For cloning the repository.
- Android SDK 34 or higher
- OpenWeather API account (free): https://openweathermap.org/api
If you are new to Flutter, follow the official documentation to install the SDK on your operating system:
Install Flutter on Windows - https://docs.flutter.dev/get-started
Install Flutter on macOS - https://docs.flutter.dev/get-started
Install Flutter on Linux - https://docs.flutter.dev/get-started
After installation, run flutter doctor in your terminal to verify that your environment is ready. Address any issues it reports.
git clone https://github.com/HordRicJr/HordricWeather.git
cd HordricWeatherOpen the cloned HordricWeather folder in VS Code or Android Studio. Your IDE should automatically detect it as a Flutter project.
flutter pub getThe project already uses a configured OpenWeather API key. If you want to use your own key:
- Create an account on OpenWeather
- Get your free API key
- Replace the key in
lib/core/constants/constants.dart:
// lib/core/constants/constants.dart
class Constants {
static const String apiKey = 'YOUR_API_KEY'; // <-- Paste your key here
// ... other constants
}dart run flutter_launcher_iconsDebug Mode
flutter runRelease Mode (APK)
flutter build apk --releaseRelease Mode (AAB for Play Store)
flutter build appbundle --releaseSolution: Ensure the Flutter SDK's bin directory is in your system's PATH variable. Re-run flutter doctor to confirm.
Solution: Run flutter doctor --android-licenses and accept all the licenses.
Solution: This can have many causes. Try these steps:
Run flutter clean to remove old build files.
Ensure your Java Development Kit (JDK) version is compatible. This project is configured for Java 17.
Check for network issues that might prevent Gradle from downloading dependencies.
Solution: Double-check that your OpenWeather API key is correct and active. A new key can take some time to become active.
dependencies:
flutter:
sdk: flutter
http: ^1.2.2 # API requests
intl: ^0.20.1 # Internationalization and dates
flutter_local_notifications: ^17.2.3 # Local notifications
permission_handler: ^11.3.1 # Permissions management
geolocator: ^13.0.1 # Geolocation
flutter_animate: ^4.5.0 # Animations
home_widget: ^0.6.0 # Android widget
shared_preferences: ^2.3.2 # Local storage
url_launcher: ^6.3.1 # Link opening
flutter_launcher_icons: ^0.14.2 # Icon generationOpenWeather API: https://openweathermap.org/
Endpoints used:
/data/2.5/weather: Current weather/data/2.5/forecast: Hourly forecasts (5 days)/data/2.5/air_pollution: Air quality
<!-- Permissions in AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />- NotificationService: Notification management (alerts, daily, lockscreen)
- BackgroundService: Automatic background updates (30 min)
- WeatherWidgetService: Android widget updates
- UserService: User data management
- AirQualityService: Air quality calculation and advice
- ClothingAdviceService: Clothing recommendations
- 2h Cooldown: Weather changes and temperature >5Β°C
- 6h Cooldown: Extreme weather alerts (heatwave, cold, storms, winds)
- Anti-duplicate: Hourly forecasts (storage by hour)
- Automatic cleanup: Deletion of old notification flags
background_weather_data: Current weather cachelast_weather_change_notification: Last change notification timestamplast_alert_notification_{type}: Alert timestamps by typehourly_notified_{HH:mm}: Notified hourly forecast flagsnotifications_enabled: Global notification statewidget_enabled: Widget state- Favorite cities, username, preferences
- Privacy Policy: Web version hosted on GitHub Pages
- CONTRIBUTING.md: Contribution guide
- LICENSE: MIT License
flutter testflutter analyzeflutter cleanHordRicJr
- GitHub: https://github.com/HordRicJr
- Email: assounrodrigue5@gmail.com
This project is licensed under the MIT License. See the LICENSE file for details.
Contributions are welcome! Feel free to:
- Fork the project and add a star β
- Create a branch for your feature
git checkout -b feature/AmazingFeature
- Commit your changes
git commit -m 'Add some AmazingFeature' - Push to the branch
git push origin feature/AmazingFeature
- Open a Pull Request
See CONTRIBUTING.md for more details.
For any questions or issues:
- Open an issue
- Check the documentation
- Email: assounrodrigue5@gmail.com
Thanks to these wonderful people who contributed to this project (emoji key):
|
ASSOUN Rodrigue |
Dependabot |
GitHub Copilot π» |
Ce projet suit la spΓ©cification all-contributors. Les contributions de toute nature sont les bienvenues !
- OpenWeather : Pour l'API mΓ©tΓ©o gratuite
- Flutter Team : Pour le framework incroyable
- CommunautΓ© Flutter : Pour les packages open-source
- Hacktoberfest : Pour encourager les contributions open-source
- GitHub Actions : Pour l'automatisation CI/CD
- β¨ First public release
- π€οΈ Complete weather with hourly and 5-day forecasts
- π Smart notification system with cooldowns
- π Air quality and health advice
- π± Customizable Android widget
- π Complete privacy policy (GDPR/CCPA)
- π¨ Modern interface with animations
- π‘ Clothing and activity advice
- ποΈ Multi-city management
- π« No ads, privacy-respecting
- π€ CI/CD with GitHub Actions
- π‘οΈ Dependabot enabled for automatic updates
HordricWeather - Your smart weather companion π€οΈ
Made with β€οΈ by HordRicJr and the community