Animated Ninja Cat clock & adorable daily alarms notifications
A Flutter 3.38.1+ cross-platform clock/alarm/weather app for Android, iOS and Windows.
- Animated ninja cat rendered entirely with Flutter CustomPainter (no image assets required).
- Live clock with selectable IANA time zone and 12/24-hour formats.
- Daily alarms scheduled with OS notifications so the app UI does not need to remain open.
- Current weather + 7-day forecast from Open-Meteo (no API key required).
- Location-based forecast.
- Material 3 light/dark UI and three visual themes.
- Persistent preferences and alarm list.
- Flutter 3.38.1 or newer (the current flutter_local_notifications package requires at least Flutter 3.38.1).
- Android Studio + Android SDK for Android.
- Xcode on macOS for iOS signing/building (Apple requirement).
- Visual Studio 2022 with Desktop development with C++ for Windows.
This source archive keeps generated Flutter platform boilerplate out of version control. The bootstrap scripts generate Android/iOS/Windows folders, patch the required permissions/notification receivers, fetch dependencies, run analysis, and run tests:
./scripts/bootstrap.ps1./scripts/bootstrap.shThe bootstrap script adds these Android permissions automatically:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />The bootstrap script also adds the notification receivers and Java 17 core-library desugaring. Android OEM background restrictions can still affect scheduled notifications on some devices.
The bootstrap script adds this iOS usage description automatically:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Ninja Cat Clock uses your location to show local weather.</string>Enable notification capability through Xcode when signing the Runner target.
Package as MSIX for best notification identity/cancellation behavior. Windows does not support repeating periodic notifications, but time-zone scheduled notifications are supported by the plugin API. Use a package identity for production distribution.
flutter pub get
flutter analyze
flutter test
flutter run -d windows # Windows
flutter run -d android # Android
flutter run -d ios # iOS, on macOSThe app does not attempt to stay alive forever in the background. Alarms are scheduled with the operating system, which is the reliable and battery-safe model on Android/iOS. Weather refreshes on app launch/resume and manually. iOS does not permit arbitrary continuously running background Dart code for a clock/weather app.
Uses Open-Meteo Forecast API: https://open-meteo.com/en/docs
- Replace bundle/application IDs if desired.
- Add store icons/screenshots.
- Android: create signing key and release AAB.
- iOS: configure Apple Developer signing and archive in Xcode.
- Windows: configure an MSIX identity and certificate, then build package.
- Test alarms on physical devices, including locked-screen/background state.
- Review store privacy disclosures for location usage.