Run the app (Android uses flavor gms by default; see pubspec default-flavor)

June 2, 2026 · View on GitHub

🌦️ Rain

A beautiful, feature-rich weather application built with Flutter

EnglishРусский

Stars Forks Downloads Play Store Installs GitHub release License

Tired of unpredictable weather? Rain keeps you prepared with accurate forecasts, interactive maps, and beautiful design. 🌦️📱🗺️

🌍 Available in 37 languages🎨 Material You & AMOLED🗺️ Interactive weather map📱 Home widget


✨ Features

🌡️ Comprehensive Weather Data

  • Real-time conditions with feels-like temperature • Hourly forecasts (12+ days) • 7+ day daily outlooks
  • Detailed metrics: UV index, humidity, wind speed/direction, precipitation, visibility, pressure, dew point
  • Day/night-aware weather icons • Sunrise/sunset times • Expandable hourly variable details

🗺️ Interactive Weather Map

  • OpenStreetMap-based interactive map • Weather markers for all saved cities
  • Tap markers for quick weather preview • Long-press to add new locations
  • Visual city selection with GPS support • Map tile caching (30 days) • Dark mode styling

🏙️ Multi-City Management

  • Save unlimited cities to your watchlist • Drag-to-reorder • Pull-to-refresh all
  • City search with autocomplete • Manual coordinate entry • GPS auto-detection
  • Edit or remove saved cities • View timezone for each location

🔔 Smart Notifications

  • Scheduled weather forecasts (1-5 hour intervals) • Custom time window (start/end)
  • Weather-condition-specific icons • Silent notifications (no sound/vibration)
  • Automatic cancellation when disabled • Background scheduling

📱 Home Screen Widget (Android)

  • Resizable widget with layouts that adapt to size:
    • 1 row — weather icon, temperature, and date/time in one line
    • 2+ rows (wide) — icon on the left, temperature with date/time underneath
    • Square — icon, temperature, and date/time stacked vertically
    • Very narrow — icon and temperature only
  • Respects app 12h/24h time format and rounded temperature setting
  • Background refresh (Workmanager, ~15 min minimum) • Custom background and text colors (HSV picker)
  • Updates when the app loads cached weather and after fresh fetches

🎨 Beautiful Design

  • Material You dynamic theming (wallpaper colors) • Pure AMOLED black theme
  • Light/Dark/System modes • Large element mode toggle • Edge-to-edge display
  • Google Fonts (Ubuntu) • Smooth animations • Shimmer loading states

🌍 Extensive Localization

  • 37 languages including: English, Русский, 中文, العربية, हिन्दी, Español, Français, Deutsch, Português, 한국어, 日本語, Türkçe, and many more
  • Regional preferences • 12h/24h time format support

🧮 Customization Options

  • Temperature: Celsius/Fahrenheit • Measurement system: Metric/Imperial
  • Wind speed: kph/m/s • Pressure: hPa/mmHg • Rounded temperatures (app + widget)
  • 12h/24h time format (app, pickers, notifications, and widget)
  • Widget color customization with HSV color picker

📸 Screenshots


📥 Download

Android

Play Store IzzyOnDroid

Other Platforms

Get the latest APK or builds for other platforms from the Releases Section.


🛠️ Building from Source

Prerequisites

  • Flutter SDK 3.44 or higher (see pubspec.yaml)
  • Dart SDK 3.12 or higher
  • Android Studio / Xcode for platform-specific builds

Steps

# Clone the repository
git clone https://github.com/darkmoonight/Rain.git
cd Rain

# Install dependencies
flutter pub get

# Generate code (Isar, Freezed, JSON, translations)
dart run slang
dart run build_runner build

# Run the app (Android uses flavor gms by default; see pubspec `default-flavor`)
flutter run
# floss on device/emulator: flutter run --flavor floss

# Build for production
flutter build appbundle --release  # Android App Bundle (Play Store)
flutter build ios --release        # iOS

Android APK

Gradle flavors gms (default, Play Store deps) and floss (no Play Services, IzzyOnDroid). Output names match GitHub Releases.

VariantFiles
gmsrain-release-gms.apk, rain-arm64-v8a-release-gms.apk, rain-armeabi-v7a-release-gms.apk, rain-x86_64-release-gms.apk
flossrain-release-floss.apk, rain-arm64-v8a-release-floss.apk, rain-armeabi-v7a-release-floss.apk, rain-x86_64-release-floss.apk

All APKs land in build/app/outputs/flutter-apk/ after ./scripts/rename_apk_outputs.sh.

Single APK (one ABI)

chmod +x scripts/*.sh

./scripts/build_apk.sh gms --target-platform android-arm64
./scripts/build_apk.sh floss --target-platform android-arm64

Full release set (8 APKs, both variants)

Per variant: first split APKs (--split-per-abi), then universal (no extra flags). Four builds total:

./scripts/build_release_apks.sh

Runs four builds and then ./scripts/restore_pub_default.sh (FOSS overrides must not stay in pubspec.lock for normal dev).

Same steps manually:

./scripts/build_apk.sh gms --split-per-abi
./scripts/build_apk.sh gms

./scripts/build_apk.sh floss --split-per-abi
./scripts/build_apk.sh floss

./scripts/restore_pub_default.sh

Manual FOSS build (e.g. reproducible / IzzyOnDroid)

pubspec_overrides.yaml must exist before flutter pub get. After pub get, patch the jni package so libdartjni.so is reproducible (same step as IzzyOnDroid RB):

cp tool/pubspec_overrides.floss.yaml pubspec_overrides.yaml
flutter pub get
./scripts/patch_jni_reproducible_build.sh
dart run slang && dart run build_runner build
flutter build apk --release --flavor floss --target-platform android-arm64
./scripts/rename_apk_outputs.sh floss

Equivalent one-liner for the jni patch (idempotent; set PUB_CACHE in CI):

sed -i -E 's|target_link_options\(jni PRIVATE "-Wl,[^"]*max-page-size=16384"\)|target_link_options(jni PRIVATE "-Wl,--build-id=none,-z,max-page-size=16384")|' \
  "${PUB_CACHE:-$HOME/.pub-cache}"/hosted/*/jni-*/src/CMakeLists.txt

pubspec_overrides.yaml is gitignored; pubspec.lock in the repo targets gms.

Code Generation

The project uses code generation for:

  • Isar Community — local database schemas
  • Freezed — immutable API models
  • JSON Serializable — JSON serialization
  • Slang — translations from assets/i18n/*.i18n.json

After changing models or locale files:

dart run slang
dart run build_runner build

Tech Stack (highlights)

  • Flutter + Riverpod 3Go RouterIsar Community
  • home_widget + Workmanager (Android widget) • flutter_local_notifications
  • Open-Meteo API • flutter_map + OSM tiles

🌐 Data Sources

Rain uses free, open weather APIs with no API key required:


🤝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.


💰 Support the Project

If Rain has become an indispensable part of your daily routine, consider supporting development:

ЮMoney


📃 License

This project is licensed under the MIT License.


👨‍💻 Contributors

Thanks to all our amazing contributors!


Made with ❤️ using Flutter