prayer_timetable 2.2.4 copy "prayer_timetable: ^2.2.4" to clipboard
prayer_timetable: ^2.2.4 copied to clipboard

Comprehensive Dart library for Islamic prayer time calculations with multiple methods, jamaah time management, timezone support, and Hijri calendar integration.

example/main.dart

/// Example usage of the prayer_timetable library
///
/// This example demonstrates the main features of the library including:
/// - Astronomical prayer time calculations
/// - Jamaah time management
/// - Prayer analysis and utilities
/// - Qibla direction calculation
/// - Hijri calendar integration

import 'package:prayer_timetable/prayer_timetable.dart';
import 'package:timezone/data/latest.dart' as tz;

void main() {
  // Initialize timezone data (required for timezone calculations)
  tz.initializeTimeZones();

  print('=== Prayer Timetable Library Example ===\n');

  // Example 1: Basic astronomical calculations
  basicExample();

  print('\n${'=' * 50}\n');

  // Example 2: Advanced features with jamaah times
  advancedExample();

  print('\n${'=' * 50}\n');

  // Example 3: Monthly prayer timetable
  monthlyExample();
}

/// Basic example showing simple prayer time calculations
void basicExample() {
  print('1. Basic Prayer Time Calculations');
  print('-' * 35);

  // Create a timetable for New York using astronomical calculations
  final timetable = PrayerTimetable.calc(
    timetableCalc: TimetableCalc(
      date: DateTime.now(),
      timezone: 'America/New_York',
      lat: 40.7128, // New York latitude
      lng: -74.0060, // New York longitude
      precision: true,
      fajrAngle: 15.0,
      highLatitudeRule: 'twilightAngle',
      madhab: 'shafi',
    ),
    jamaahOn: false,
    timezone: 'America/New_York',
  );

  // Display today's prayer times
  print('Today\'s Prayer Times (New York):');
  final prayerNames = ['Fajr', 'Sunrise', 'Dhuhr', 'Asr', 'Maghrib', 'Isha'];

  for (int i = 0; i < 6; i++) {
    Prayer prayer = timetable.current[i];
    String timeStr = '${prayer.prayerTime.hour.toString().padLeft(2, '0')}:'
        '${prayer.prayerTime.minute.toString().padLeft(2, '0')}';
    print('  ${prayerNames[i].padRight(8)}: $timeStr');
  }

  // Show current prayer status
  print('\nPrayer Status:');
  print(
      '  Current prayer ID: ${timetable.utils.currentId} (${prayerNames[timetable.utils.currentId]})');
  print('  Next prayer ID: ${timetable.utils.nextId} (${prayerNames[timetable.utils.nextId]})');
  print('  Time until next prayer: ${formatDuration(timetable.utils.countDown)}');
  print('  Prayer completion: ${timetable.utils.percentage.toStringAsFixed(1)}%');
}

/// Advanced example with jamaah times and additional features
void advancedExample() {
  print('2. Advanced Features with Jamaah Times');
  print('-' * 40);

  // Create a timetable with jamaah times enabled
  final timetable = PrayerTimetable.calc(
    timetableCalc: TimetableCalc(
      date: DateTime.now(),
      timezone: 'Europe/London',
      lat: 51.5074, // London latitude
      lng: -0.1278, // London longitude
      precision: true,
      fajrAngle: 18.0, // Different angle for London
      ishaAngle: 17.0,
      highLatitudeRule: 'twilightAngle',
      madhab: 'hanafi', // Hanafi madhab
    ),
    jamaahOn: true,
    jamaahMethods: ['afterthis', '', 'afterthis', 'afterthis', 'afterthis', 'afterthis'],
    jamaahOffsets: [
      [0, 15], // Fajr jamaah 15 minutes after adhan
      [0, 0], // Sunrise (no jamaah)
      [0, 10], // Dhuhr jamaah 10 minutes after adhan
      [0, 10], // Asr jamaah 10 minutes after adhan
      [0, 5], // Maghrib jamaah 5 minutes after adhan
      [0, 20] // Isha jamaah 20 minutes after adhan
    ],
    jamaahPerPrayer: [true, false, true, true, true, true],
    timezone: 'Europe/London',
  );

  // Display prayer and jamaah times
  print('Today\'s Prayer Times (London) with Jamaah:');
  final prayerNames = ['Fajr', 'Sunrise', 'Dhuhr', 'Asr', 'Maghrib', 'Isha'];

  for (int i = 0; i < 6; i++) {
    Prayer prayer = timetable.current[i];
    String prayerTimeStr = '${prayer.prayerTime.hour.toString().padLeft(2, '0')}:'
        '${prayer.prayerTime.minute.toString().padLeft(2, '0')}';

    String output = '  ${prayerNames[i].padRight(8)}: $prayerTimeStr';

    if (prayer.jamaahTime != prayer.prayerTime && i != 1) {
      String jamaahTimeStr = '${prayer.jamaahTime.hour.toString().padLeft(2, '0')}:'
          '${prayer.jamaahTime.minute.toString().padLeft(2, '0')}';
      output = '$output (Jamaah: $jamaahTimeStr)';
    }

    print(output);

    if (prayer.jamaahTime != prayer.prayerTime && i != 1) {
      String jamaahTimeStr = '${prayer.jamaahTime.hour.toString().padLeft(2, '0')}:'
          '${prayer.jamaahTime.minute.toString().padLeft(2, '0')}';
      print(' (Jamaah: $jamaahTimeStr)');
    } else {
      print('');
    }
  }

  // Islamic information
  print('\nIslamic Information:');
  print('  Qibla direction: ${timetable.utils.qibla.toStringAsFixed(1)}° from North');
  print(
      '  Hijri date: ${timetable.utils.hijri[2]}/${timetable.utils.hijri[1]}/${timetable.utils.hijri[0]}');
  print('  Islamic midnight: ${formatTime(timetable.utils.midnight)}');
  print('  Last third of night: ${formatTime(timetable.utils.lastThird)}');
}

/// Example showing monthly prayer timetable generation
void monthlyExample() {
  print('3. Monthly Prayer Timetable');
  print('-' * 28);

  // Generate monthly prayer times for current month
  final now = DateTime.now();
  final monthlyPrayers = PrayerTimetable.monthTable(
    now.year,
    now.month,
    calc: TimetableCalc(
      date: now,
      timezone: 'Asia/Dubai',
      lat: 25.2048, // Dubai latitude
      lng: 55.2708, // Dubai longitude
      precision: true,
      fajrAngle: 18.0,
    ),
    timezone: 'Asia/Dubai',
    jamaahOn: false,
  );

  print('Monthly Prayer Times for Dubai (${getMonthName(now.month)} ${now.year}):');
  print('Day  Fajr   Sunrise Dhuhr  Asr    Maghrib Isha');
  print('-' * 50);

  // Show first 7 days as example
  for (int day = 0; day < 7 && day < monthlyPrayers.length; day++) {
    List<Prayer> dayPrayers = monthlyPrayers[day];
    String dayStr = (day + 1).toString().padLeft(2);

    String line = '$dayStr   ';
    for (int i = 0; i < 6; i++) {
      String timeStr = '${dayPrayers[i].prayerTime.hour.toString().padLeft(2, '0')}:'
          '${dayPrayers[i].prayerTime.minute.toString().padLeft(2, '0')}';
      line += timeStr.padRight(7);
    }
    print(line);
  }

  print('... (showing first 7 days of ${monthlyPrayers.length} total days)');
}

/// Helper function to format Duration as readable string
String formatDuration(Duration duration) {
  int hours = duration.inHours;
  int minutes = duration.inMinutes.remainder(60);

  if (hours > 0) {
    return '${hours}h ${minutes}m';
  } else {
    return '${minutes}m';
  }
}

/// Helper function to format DateTime as time string
String formatTime(DateTime dateTime) {
  return '${dateTime.hour.toString().padLeft(2, '0')}:'
      '${dateTime.minute.toString().padLeft(2, '0')}';
}

/// Helper function to get month name
String getMonthName(int month) {
  const months = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
  ];
  return months[month - 1];
}
2
likes
150
points
5
downloads

Publisher

unverified uploader

Weekly Downloads

Comprehensive Dart library for Islamic prayer time calculations with multiple methods, jamaah time management, timezone support, and Hijri calendar integration.

Repository (GitHub)
View/report issues

Topics

#islam #prayer #muslim #adhan #hijri

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

adhan_dart, hijri, timezone

More

Packages that depend on prayer_timetable