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

108 lines
3.7 KiB
Dart

import 'dart:async';
import 'dart:ui';
import 'package:device_calendar/device_calendar.dart';
import 'package:timezone/timezone.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 = [];
Location _currentLocation;
if (DateTime.now().timeZoneName == "+04")
_currentLocation = getLocation('Asia/Dubai');
else
_currentLocation = getLocation('Asia/Riyadh');
scheduleDateTime!.forEach((element) {
RecurrenceRule recurrenceRule = RecurrenceRule(
RecurrenceFrequency.Daily,
daysOfWeek: daysOfWeek,
endDate: element,
);
//added byAamir Tz Time
Event event = Event(writableCalendars!.id,
recurrenceRule: recurrenceRule,
start: TZDateTime.from(element, _currentLocation),
end: TZDateTime.from(element.add(Duration(minutes: 30)), _currentLocation),
title: title,
description: description);
events.add(event);
});
events.forEach((element) {
deviceCalendarPlugin.createOrUpdateEvent(element);
});
}
Future createOrUpdateEvent({required String title, required String description, DateTime? scheduleDateTime, String? eventId}) async {
RecurrenceRule recurrenceRule = RecurrenceRule(
RecurrenceFrequency.Daily,
// daysOfWeek: daysOfWeek,
endDate: scheduleDateTime,
);
Location _currentLocation;
if (DateTime.now().timeZoneName == "+04")
_currentLocation = getLocation('Asia/Dubai');
else
_currentLocation = getLocation('Asia/Riyadh');
TZDateTime scheduleDateTimeUTZ = TZDateTime.from(scheduleDateTime!, _currentLocation);
//print("eventId: " + eventId);
// print("writableCalendars-name: " + writableCalendars.name);
// print("writableCalendars-Id: " + writableCalendars.id);
// print("writableCalendarsToString: " + writableCalendars.toString());
Event event = Event(writableCalendars!.id, start: scheduleDateTimeUTZ, end: scheduleDateTimeUTZ.add(Duration(minutes: 30)), title: title, description: description);
deviceCalendarPlugin.createOrUpdateEvent(event).catchError((e) {
print("catchError " + e.toString());
}).whenComplete(() {
print("whenComplete " + eventId!);
});
}
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);
}
}