getOccurrenceAppointment method

Appointment? getOccurrenceAppointment(
  1. Object? patternAppointment,
  2. DateTime date,
  3. String calendarTimeZone
)

Returns the occurrence appointment for the given pattern appointment at the specified date.

If there is no appointment occurring on the date specified, null is returned.

patternAppointment - required - The pattern appointment is the start appointment in a recurrence series from which the occurrence appointments are cloned with pattern appointment characteristics.

date - required - The date on which the occurrence appointment is requested.

See also:


class MyAppState extends State<MyApp>{
  late CalendarController _calendarController;
  late _AppointmentDataSource _dataSource;
  late Appointment recurrenceApp;

  @override
  initState(){
    _calendarController = CalendarController();
    _dataSource = _getCalendarDataSource();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SfCalendar(
          view: CalendarView.month,
          controller: _calendarController,
          dataSource: _dataSource,
          initialDisplayDate: DateTime(2020,11,27,9),
          onTap: (CalendarTapDetails details) {
            final DateTime? date = details.date;
           final Appointment? occurrenceAppointment =
            _dataSource.getOccurrenceAppointment(
                                                recurrenceApp, date!, '');
          },
        ),
     ),
    );
  }
  _AppointmentDataSource _getCalendarDataSource() {
    final List<Appointment> appointments = <Appointment>[];
   recurrenceApp = Appointment(
      startTime: DateTime(2020,11,27,9),
      endTime: DateTime(2020,11,27,9).add(const Duration(hours: 2)),
      subject: 'Meeting',
      color: Colors.cyanAccent,
      startTimeZone: '',
      endTimeZone: '',
     recurrenceRule: 'FREQ=DAILY;INTERVAL=2;COUNT=5',
    );
    appointments.add(recurrenceApp);
    appointments.add(Appointment(
        startTime: DateTime(2020,11,28,5),
        endTime: DateTime(2020,11,30,7),
        subject: 'Discussion',
        color: Colors.orangeAccent,
        startTimeZone: '',
        endTimeZone: '',
        isAllDay: true
    ));
    return _AppointmentDataSource(appointments);
  }
}
class _AppointmentDataSource extends CalendarDataSource {
  _AppointmentDataSource(List<Appointment> source){
    appointments = source;
  }
}

Implementation

Appointment? getOccurrenceAppointment(
    Object? patternAppointment, DateTime date, String calendarTimeZone) {
  if (patternAppointment == null) {
    return null;
  }

  final List<dynamic> patternAppointmentColl = <dynamic>[patternAppointment];
  final List<CalendarAppointment> patternAppointments =
      AppointmentHelper.generateCalendarAppointments(
          this, calendarTimeZone, patternAppointmentColl);
  final CalendarAppointment patternCalendarAppointment =
      patternAppointments[0];

  if (patternCalendarAppointment.recurrenceRule == null ||
      patternCalendarAppointment.recurrenceRule!.isEmpty) {
    return null;
  } else if (CalendarViewHelper.isDateInDateCollection(
      patternCalendarAppointment.recurrenceExceptionDates, date)) {
    final List<CalendarAppointment> dataSourceAppointments =
        AppointmentHelper.generateCalendarAppointments(
            this, calendarTimeZone);
    for (int i = 0; i < dataSourceAppointments.length; i++) {
      final CalendarAppointment dataSourceAppointment =
          dataSourceAppointments[i];
      if (patternCalendarAppointment.id ==
              dataSourceAppointment.recurrenceId &&
          (isSameDate(dataSourceAppointment.startTime, date))) {
        return dataSourceAppointment.convertToCalendarAppointment();
      }
    }
  } else {
    final List<CalendarAppointment> occurrenceAppointments =
        AppointmentHelper.getVisibleAppointments(
            date, date, patternAppointments, calendarTimeZone, false,
            canCreateNewAppointment: false);

    if (occurrenceAppointments.isEmpty) {
      return null;
    }

    return occurrenceAppointments[0].convertToCalendarAppointment();
  }
  return null;
}