Islamic prayer times for Dart and Flutter. Pure Dart port of pray-calc, implementing the MCW seasonal model and dynamic twilight angles. Uses nrel_spa for the NREL Solar Position Algorithm.
dependencies:
pray_calc_dart: ^1.0.0import 'package:pray_calc_dart/pray_calc_dart.dart';
void main() {
final date = DateTime(2024, 3, 15);
final times = getTimes(date, 40.7128, -74.0060, -5.0);
print('Fajr: ${formatTime(times.fajr)}');
print('Sunrise: ${formatTime(times.sunrise)}');
print('Dhuhr: ${formatTime(times.dhuhr)}');
print('Asr: ${formatTime(times.asr)}');
print('Maghrib: ${formatTime(times.maghrib)}');
print('Isha: ${formatTime(times.isha)}');
print('Qiyam: ${formatTime(times.qiyam)}');
}Full API documentation, guides, and examples are in the wiki.
| Function | Description |
|---|---|
getTimes(date, lat, lng, tz, {...}) |
All prayer times for a date and location |
getAngles(date, lat, lng, {...}) |
Dynamic Fajr/Isha depression angles |
getSpa(date, lat, lng, tz, {...}) |
NREL Solar Position Algorithm (re-export) |
formatTime(hours) |
Fractional hours to HH:MM:SS string |
Fixed-angle methods (ISNA 15 degrees, MWL 18 degrees) produce inaccurate Fajr times at latitudes above 45 degrees N/S. The dynamic method adapts the depression angle based on season, latitude, Earth-Sun distance, and local atmospheric conditions.
Result: approximately 18 degrees at the equator, approximately 12-14 degrees at 50-55 degrees N in summer. Matches observational data from the Moonsighting Committee Worldwide.
Dart SDK 3.7.0+. Works in Flutter (iOS, Android, Web, Desktop), Dart CLI, and server-side Dart. Single dependency: nrel_spa.
- pray-calc - TypeScript/JavaScript version (npm)
- nrel-spa - Standalone NREL SPA for JavaScript
- qibla - Qibla direction calculator
The Solar Position Algorithm is based on:
Reda, I. and Andreas, A. (2004). Solar Position Algorithm for Solar Radiation Applications. NREL/TP-560-34302. DOI: 10.2172/15003974
The MCW seasonal model is based on the work of the Moonsighting Committee Worldwide (Khalid Shaukat).
MIT. The NREL SPA implementation carries its own terms (see LICENSE for details).