Awqat أوقات
Native prayer time reminders for Flutter. Uses platform-native AlarmManager (Android) and UNNotificationCenter (iOS) for reliable, battery-efficient Islamic prayer notifications.
✨ Features
- 🕌 Accurate Prayer Times - Built-in calculation using proven astronomical algorithms
- 🔔 Native Notifications - No Dart isolate overhead, works even when app is closed
- 🔋 Battery Efficient - Uses system-level alarm APIs
- 📱 Cross Platform - Full support for Android and iOS
- 🌍 12 Calculation Methods - Muslim World League, Egyptian, Karachi, Umm Al-Qura, and more
- 🕋 Madhab Support - Shafi and Hanafi Asr calculation
📦 Installation
dependencies:
awqat: ^0.1.0
🚀 Quick Start
import 'package:awqat/awqat.dart';
// 1. Initialize with your location
await Awqat.initialize(
config: AwqatConfig(
latitude: 23.8103,
longitude: 90.4125,
method: CalculationMethod.karachi,
madhab: Madhab.hanafi,
),
);
// 2. Get prayer times
final times = await Awqat.getPrayerTimes();
print('Fajr: ${times.fajr}');
print('Next Prayer: ${times.nextPrayer()}');
// 3. Schedule native reminders
await Awqat.scheduleReminders(
prayers: [PrayerType.fajr, PrayerType.dhuhr, PrayerType.asr],
offsetMinutes: -5, // 5 minutes before
);
📱 Platform Setup
Android
Add the following to your android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
iOS
Add to your ios/Runner/Info.plist:
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
📖 API Reference
Configuration
AwqatConfig(
latitude: 23.8103,
longitude: 90.4125,
timezone: 'Asia/Dhaka', // Optional, uses device timezone
method: CalculationMethod.karachi,
madhab: Madhab.hanafi,
highLatitudeRule: HighLatitudeRule.middleOfTheNight,
adjustments: {'fajr': 2}, // Manual adjustments in minutes
)
Calculation Methods
| Method | Fajr | Isha |
|---|---|---|
muslimWorldLeague |
18° | 17° |
egyptian |
19.5° | 17.5° |
karachi |
18° | 18° |
ummAlQura |
18.5° | 90 min |
northAmerica |
15° | 15° |
dubai |
18.2° | 18.2° |
kuwait |
18° | 17.5° |
qatar |
18° | 90 min |
singapore |
20° | 18° |
turkey |
18° | 17° |
tehran |
17.7° | 14° |
Methods
// Initialize
await Awqat.initialize(config: AwqatConfig(...));
// Get prayer times
final times = await Awqat.getPrayerTimes(date: DateTime.now());
// Schedule reminders
await Awqat.scheduleReminders(
prayers: [PrayerType.fajr],
offsetMinutes: -5,
);
// Cancel reminders
await Awqat.cancelAllReminders();
await Awqat.cancelReminder(PrayerType.fajr);
// Permissions
final hasPermission = await Awqat.hasPermission();
final granted = await Awqat.requestPermission();
PrayerTimes
final times = await Awqat.getPrayerTimes();
times.fajr; // DateTime
times.sunrise; // DateTime
times.dhuhr; // DateTime
times.asr; // DateTime
times.maghrib; // DateTime
times.isha; // DateTime
times.currentPrayer(); // PrayerType
times.nextPrayer(); // PrayerType
times.timeUntilNextPrayer(); // Duration
🔧 Why Native?
Flutter packages like android_alarm_manager_plus require spinning up a Dart isolate for each alarm. This:
- ❌ Takes 1-3 seconds to start
- ❌ Consumes more battery
- ❌ Can be killed by aggressive OEMs (Xiaomi, Huawei)
- ❌ Might not wake the device reliably
Awqat uses:
- ✅ Native
AlarmManager.setAlarmClock()on Android - ✅ Native
UNCalendarNotificationTriggeron iOS - ✅ Zero Dart overhead
- ✅ Works with Doze mode
- ✅ Survives device restarts (Android)
📄 License
MIT License - see LICENSE for details.
🤝 Contributing
Contributions are welcome! Please read our contributing guidelines before submitting a PR.
Made with ❤️ for the Muslim community.