class Event {
final String recurrenceRule;
final bool isAllDay;
final String description;
@JsonKey(toJson: _dateTimeToJson, fromJson: _dateTimeFromJson)
final DateTime startTime;
@JsonKey(toJson: _dateTimeToJson, fromJson: _dateTimeFromJson)
final DateTime endTime;
final String subject;
@JsonKey(toJson: _colorToJson, fromJson: _colorFromJson)
final Color color;
@JsonKey(includeIfNull: false)
final String? documentIDFireStore;
Event({
this.documentIDFireStore,
this.recurrenceRule = '',
this.isAllDay = false,
this.description = '',
required this.startTime,
required this.endTime,
this.subject = 'No subject',
this.color = Colors.lightBlue,
});
//Skip the Json related information. Please do not mind them.
Map<String, dynamic> toJson() => _$EventToJson(this);
factory Event.fromJson(Map<String, dynamic> json,String documentID) => _$EventFromJson(json, documentID);
//Helper functions for @JsonKey
static String _dateTimeToJson(DateTime dateTime) =>
dateTime.toIso8601String();
static DateTime _dateTimeFromJson(String dateTime) =>
DateTime.parse(dateTime);
static String _colorToJson(Color color) => color.value.toRadixString(16);
static Color _colorFromJson(String colorString) =>
Color(int.parse(colorString, radix: 16));
}
class EventDataSource extends CalendarDataSource {
EventDataSource(List<Event> source) {
this.appointments = source;
}
@override
DateTime getStartTime(int index) => (appointments![index] as Event).startTime;
@override
DateTime getEndTime(int index) => (appointments![index] as Event).endTime;
@override
Color getColor(int index) => (appointments![index] as Event).color;
@override
String getRecurrenceRule(int index) =>
(appointments![index] as Event).recurrenceRule;
@override
String getSubject(int index) => (appointments![index] as Event).subject;
@override
String getNotes(int index) => (appointments![index] as Event).description;
@override
bool isAllDay(int index) => (appointments![index] as Event).isAllDay;