Recurrence

A custom recurrence rules implementation for flow

Getting started

Add the package to your pubspec.yaml:

dependencies:
  recurrence: ^0.1.0

Usage

Daily Recurrence

final daily = DailyRecurrenceRule();

// Get next occurrence
final next = daily.nextOccurrence(DateTime.now()); // 
// Get previous occurrence
final previous = daily.previousOccurrence(DateTime.now());

Weekly Recurrence

// Create a rule for Mondays
final weekly = WeekdayRecurrence(data: DateTime.monday);

// Get next Monday
final nextMonday = weekly.nextOccurrence(DateTime.now());
// Get previous Monday
final previousMonday = weekly.previousOccurrence(DateTime.now());

Monthly Recurrence

// Create a rule for the 15th of each month
final monthly = MonthlyRecurrenceRule(data: 15);

// Get next occurrence on the 15th
final next = monthly.nextOccurrence(DateTime.now());
// Get previous occurrence on the 15th
final previous = monthly.previousOccurrence(DateTime.now());

Yearly Recurrence

// Create a rule for March 15th
final yearly = YearlyRecurrence(month: 3, day: 15);

// Get next occurrence on March 15th
final next = yearly.nextOccurrence(DateTime.now());
// Get previous occurrence on March 15th
final previous = yearly.previousOccurrence(DateTime.now());

Interval Recurrence

// Create a rule for every 2 days
final interval = IntervalRecurrenceRule(data: Duration(days: 2));

// Get next occurrence
final next = interval.nextOccurrence(DateTime.now());
// Get previous occurrence
final previous = interval.previousOccurrence(DateTime.now());

Working with Time Ranges

final daily = DailyRecurrenceRule();
final range = CustomTimeRange(
  DateTime(2024, 3, 15),
  DateTime(2024, 3, 20),
);

// Get all occurrences within the range
final occurrences = daily.occurrences(range: range);

// Get next occurrence within the range
final next = daily.nextOccurrence(DateTime.now(), range: range);

Additional information

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Issues

If you find any issues or have suggestions for improvements, please file them in the GitHub issue tracker.

License

This package is licensed under the MIT License - see the LICENSE file for details.

Majority of this file is AI generated

Libraries

recurrence