Skip to content

Commit

Permalink
🚀 Added support for multiple day events
Browse files Browse the repository at this point in the history
  • Loading branch information
ujas-m-simformsolutions authored and vatsaltanna-simformsolutions committed Oct 12, 2021
1 parent 2adff4b commit 10e286b
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 19 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.0.3 - October 11,2021 [Unreleased]

- Added support for multiple day events

# 0.0.2

- Update `README.md` file.
Expand Down
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,25 @@ For web demo visit [Calendar View Example](https://simformsolutionspvtltd.github
```dart
final event = CalendarEventData(
date: DateTime(2021, 8, 10);
date: DateTime(2021, 8, 10),
event: "Event 1",
);
CalendarControllerProvider.of(context).controller.add(event);
```
To Add events in range of dates:
```dart
final event = CalendarEventData(
date: DateTime(2021, 8, 10),
endDate: DateTime(2021,8,15),
event: "Event 1",
);
CalendarControllerProvider.of(context).controller.add(event);
```

To Remove event:

```dart
Expand Down
2 changes: 1 addition & 1 deletion example/ios/Flutter/AppFrameworkInfo.plist
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
<string>9.0</string>
</dict>
</plist>
2 changes: 1 addition & 1 deletion example/lib/pages/day_view_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class _DayViewPageDemoState extends State<DayViewPageDemo> {
withDuration: true,
));
if (event == null) return;
CalendarControllerProvider.of(context).controller.add(event);
CalendarControllerProvider.of<Event>(context).controller.add(event);
},
),
body: DayViewWidget(),
Expand Down
2 changes: 1 addition & 1 deletion example/lib/pages/month_view_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ class _MonthViewPageDemoState extends State<MonthViewPageDemo> {
),
);
if (event == null) return;
CalendarControllerProvider.of(context).controller.add(event);
CalendarControllerProvider.of<Event>(context).controller.add(event);
}
}
2 changes: 1 addition & 1 deletion example/lib/pages/week_view_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ class _WeekViewDemoState extends State<WeekViewDemo> {
withDuration: true,
));
if (event == null) return;
CalendarControllerProvider.of(context).controller.add(event);
CalendarControllerProvider.of<Event>(context).controller.add(event);
}
}
1 change: 1 addition & 0 deletions example/lib/widgets/add_event_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'date_time_selector.dart';

class AddEventWidget extends StatefulWidget {
final void Function(CalendarEventData<Event>)? onEventAdd;

const AddEventWidget({
Key? key,
this.onEventAdd,
Expand Down
2 changes: 1 addition & 1 deletion example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ dependencies:
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
intl:
flutter_colorpicker: 0.4.0
flutter_colorpicker: ^0.6.0
calendar_view:
path: ../

Expand Down
4 changes: 2 additions & 2 deletions lib/src/calendar_controller_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ class CalendarControllerProvider<T> extends InheritedWidget {
.dependOnInheritedWidgetOfExactType<CalendarControllerProvider<T>>();
assert(
result != null,
'No CalendarControllerProvider found in context. '
'No CalendarControllerProvider<$T> found in context. '
'To solve this issue either wrap material app with '
'\'CalendarControllerProvider\' or provide controller argument in '
'\'CalendarControllerProvider<$T>\' or provide controller argument in '
'respected calendar view class.');
return result!;
}
Expand Down
11 changes: 9 additions & 2 deletions lib/src/calendar_event_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,21 @@ class CalendarEventData<T> {
/// Event on [date].
final T? event;

final DateTime? _endDate;

/// Stores all the events on [date]
const CalendarEventData({
required this.date,
required this.title,
this.description = "",
this.event,
this.color = Colors.blue,
this.startTime,
this.endTime,
});
DateTime? endDate,
required this.date,
}) : _endDate = endDate;

DateTime get endDate => _endDate ?? date;

Map<String, dynamic> toJson() => {
"date": date,
Expand All @@ -54,6 +59,7 @@ class CalendarEventData<T> {
"event": event,
"title": title,
"description": description,
"endDate": endDate,
};

@override
Expand All @@ -63,6 +69,7 @@ class CalendarEventData<T> {
bool operator ==(Object other) {
return other is CalendarEventData<T> &&
date.compareWithoutTime(other.date) &&
endDate.compareWithoutTime(other.endDate) &&
event == other.event &&
title == other.title &&
description == other.description;
Expand Down
45 changes: 36 additions & 9 deletions lib/src/event_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ class EventController<T> extends ChangeNotifier {

final _eventList = <CalendarEventData<T>>[];

final _rangingEventList = <CalendarEventData<T>>[];

/// Returns list of [CalendarEventData<T>] stored in this controller.
List<CalendarEventData<T>> get events => _eventList.toList(growable: false);

Expand Down Expand Up @@ -61,20 +63,27 @@ class EventController<T> extends ChangeNotifier {
}

void _addEvent(CalendarEventData<T> event) {
for (var i = 0; i < _events.length; i++) {
if (_events[i].year == event.date.year) {
if (_events[i].addEvent(event)) {
assert(event.endDate.difference(event.date).inDays >= 0,
'The end date must be greater or equal to the start date');

if (event.endDate.difference(event.date).inDays > 0) {
_rangingEventList.add(event);
_eventList.add(event);
} else {
for (final e in _events) {
if (e.year == event.date.year && e.addEvent(event)) {
_eventList.add(event);
return;
}
return;
}
}

final newEvent = _YearEvent<T>(year: event.date.year);
if (newEvent.addEvent(event)) {
_events.add(newEvent);
_eventList.add(event);
final newEvent = _YearEvent<T>(year: event.date.year);
if (newEvent.addEvent(event)) {
_events.add(newEvent);
_eventList.add(event);
}
}
notifyListeners();
}

/// Returns events on given day.
Expand Down Expand Up @@ -103,6 +112,24 @@ class EventController<T> extends ChangeNotifier {
}
}

final daysFromRange = <DateTime>[];
for (final rangingEvent in _rangingEventList) {
for (var i = 0;
i <= rangingEvent.endDate.difference(rangingEvent.date).inDays;
i++) {
daysFromRange.add(rangingEvent.date.add(Duration(days: i)));
}
if (rangingEvent.date.isBefore(rangingEvent.endDate)) {
for(final eventDay in daysFromRange){
if (eventDay.year == date.year &&
eventDay.month == date.month &&
eventDay.day == date.day) {
events.add(rangingEvent);
}
}
}
}

return events;
}
}
Expand Down

0 comments on commit 10e286b

Please sign in to comment.