You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PatientApp-KKUMC/lib/uitl/CalendarUtils.dart

80 lines
2.3 KiB
Dart

import 'dart:async';
import 'dart:ui';
import 'package:device_calendar/device_calendar.dart';
final DeviceCalendarPlugin deviceCalendarPlugin = DeviceCalendarPlugin();
class CalendarUtils {
static Completer<CalendarUtils> _completer;
Calendar get writableCalendars => calendars?.firstWhere((c) => !c.isReadOnly);
List<Calendar> calendars;
CalendarUtils._(this.calendars);
static Future<CalendarUtils> getInstance() async {
if (_completer == null) {
_completer = Completer<CalendarUtils>();
try {
final calendarsResult = await deviceCalendarPlugin.retrieveCalendars();
_completer.complete(CalendarUtils._(calendarsResult?.data));
} on Exception catch (e) {
_completer.completeError(e);
final Future<CalendarUtils> sharedPrefsFuture = _completer.future;
_completer = null;
return sharedPrefsFuture;
}
}
return _completer.future;
}
Future createOrUpdateEvents(
{List<DateTime> scheduleList,
String title,
String description,
List<DateTime> scheduleDateTime,
List<DayOfWeek> daysOfWeek}) async {
List<Event> events = List();
scheduleDateTime.forEach((element) {
RecurrenceRule recurrenceRule = RecurrenceRule(
RecurrenceFrequency.Daily,
daysOfWeek: daysOfWeek,
endDate: element,
);
Event event = Event(writableCalendars.id,
recurrenceRule: recurrenceRule,
start: element,
end: element.add(Duration(minutes: 30)),
title: title,
description: description);
events.add(event);
});
events.forEach((element) {
deviceCalendarPlugin.createOrUpdateEvent(element);
});
}
deleteEvent(Calendar _calendar, Event _event) async {
await deviceCalendarPlugin.deleteEvent(_calendar.id, _event.eventId);
}
Future retrieveEvents(
String calendarId,
RetrieveEventsParams retrieveEventsParams,
) async {
return await deviceCalendarPlugin.retrieveEvents(
calendarId, retrieveEventsParams);
}
Future createCalendar(
String calendarName, {
Color calendarColor,
String localAccountName,
}) async {
return await deviceCalendarPlugin.createCalendar(calendarName,
calendarColor: calendarColor, localAccountName: localAccountName);
}
}