From e11c667636d0ba000857505d960df151964b269b Mon Sep 17 00:00:00 2001 From: Roman Nakonechnyi Date: Tue, 10 Jan 2023 13:21:41 +0000 Subject: [PATCH 1/5] Add loadEventsForDisabledDays to allow loading events for disabled days too --- lib/src/table_calendar.dart | 8 ++++++- test/table_calendar_test.dart | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/lib/src/table_calendar.dart b/lib/src/table_calendar.dart index bcd52656..b1d650f3 100644 --- a/lib/src/table_calendar.dart +++ b/lib/src/table_calendar.dart @@ -161,6 +161,11 @@ class TableCalendar extends StatefulWidget { /// * `RangeSelectionMode.enforced` - range selection is always on. final RangeSelectionMode rangeSelectionMode; + /// Allows to load events for days that are not enabled + /// If `true` it will ignore `enabledDayPredicate` when calling `eventLoader`. + /// If `false` then `enabledDayPredicate` will be used to check when to call `eventLoader` + final bool loadEventsForDisabledDays; + /// Function that assigns a list of events to a specified day. final List Function(DateTime day)? eventLoader; @@ -248,6 +253,7 @@ class TableCalendar extends StatefulWidget { this.rangeSelectionMode = RangeSelectionMode.toggledOff, this.eventLoader, this.enabledDayPredicate, + this.loadEventsForDisabledDays = false, this.selectedDayPredicate, this.holidayPredicate, this.onRangeSelected, @@ -640,7 +646,7 @@ class _TableCalendarState extends State> { children.add(content); - if (!isDisabled) { + if (widget.loadEventsForDisabledDays || !isDisabled) { final events = widget.eventLoader?.call(day) ?? []; Widget? markerWidget = widget.calendarBuilders.markerBuilder?.call(context, day, events); diff --git a/test/table_calendar_test.dart b/test/table_calendar_test.dart index 3361255b..e3d3c806 100644 --- a/test/table_calendar_test.dart +++ b/test/table_calendar_test.dart @@ -460,6 +460,50 @@ void main() { }, ); + testWidgets( + 'Event loader is called for disabled days when loadEventForDisabledDays is set to true', + (tester) async { + final eventDay = DateTime.utc(2021, 7, 20); + + await tester.pumpWidget(setupTestWidget( + TableCalendar( + focusedDay: initialFocusedDay, + loadEventsForDisabledDays: true, + firstDay: firstDay, + lastDay: lastDay, + currentDay: today, + eventLoader: (day) { + if (day.day == eventDay.day && day.month == eventDay.month) { + return ['Event 1', 'Event 2', 'Event 3']; + } + + return []; + }, + enabledDayPredicate: (day) => false, + ), + )); + + final eventDayKey = cellContentKey(eventDay); + final eventDayCellContent = find.byKey(eventDayKey); + + final eventDayStack = find.ancestor( + of: eventDayCellContent, + matching: find.byType(Stack), + ); + + final eventMarkers = tester.widgetList( + find.descendant( + of: eventDayStack, + matching: find.byWidgetPredicate( + (Widget marker) => marker is Container && marker.child == null, + ), + ), + ); + + expect(eventMarkers.length, 3); + }, + ); + testWidgets( 'currentDay correctly marks given day as today', (tester) async { From baaa3f9ebb50d775c2c718be7194c43d6560ef15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksander=20Wo=C5=BAniak?= Date: Wed, 8 Jan 2025 18:18:10 +0100 Subject: [PATCH 2/5] Fix code formatting --- test/table_calendar_test.dart | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/test/table_calendar_test.dart b/test/table_calendar_test.dart index 7551f0c0..2889b947 100644 --- a/test/table_calendar_test.dart +++ b/test/table_calendar_test.dart @@ -464,23 +464,25 @@ void main() { (tester) async { final eventDay = DateTime.utc(2021, 7, 20); - await tester.pumpWidget(setupTestWidget( - TableCalendar( - focusedDay: initialFocusedDay, - loadEventsForDisabledDays: true, - firstDay: firstDay, - lastDay: lastDay, - currentDay: today, - eventLoader: (day) { - if (day.day == eventDay.day && day.month == eventDay.month) { - return ['Event 1', 'Event 2', 'Event 3']; - } + await tester.pumpWidget( + setupTestWidget( + TableCalendar( + focusedDay: initialFocusedDay, + loadEventsForDisabledDays: true, + firstDay: firstDay, + lastDay: lastDay, + currentDay: today, + eventLoader: (day) { + if (day.day == eventDay.day && day.month == eventDay.month) { + return ['Event 1', 'Event 2', 'Event 3']; + } - return []; - }, - enabledDayPredicate: (day) => false, + return []; + }, + enabledDayPredicate: (day) => false, + ), ), - )); + ); final eventDayKey = cellContentKey(eventDay); final eventDayCellContent = find.byKey(eventDayKey); From 665dd69d4b0072ddd33e887e12310ee33f0d90c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksander=20Wo=C5=BAniak?= Date: Wed, 8 Jan 2025 18:36:11 +0100 Subject: [PATCH 3/5] Upgrade intl to ^0.20.0 --- example/pubspec.lock | 38 +++++++++++++++++++++++++++++++++++--- pubspec.lock | 38 +++++++++++++++++++++++++++++++++++--- pubspec.yaml | 2 +- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index 69440148..0dc447c5 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -59,14 +59,30 @@ packages: description: flutter source: sdk version: "0.0.0" + http: + dependency: transitive + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" intl: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "00f33b908655e606b86d2ade4710a231b802eec6f11e87e4ea3783fd72077a50" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.1" leak_tracker: dependency: transitive description: @@ -191,6 +207,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.2" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" vector_math: dependency: transitive description: @@ -207,6 +231,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.5" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.5.0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.lock b/pubspec.lock index 1c8d5181..d4a0886f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -59,14 +59,30 @@ packages: description: flutter source: sdk version: "0.0.0" + http: + dependency: transitive + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" intl: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "00f33b908655e606b86d2ade4710a231b802eec6f11e87e4ea3783fd72077a50" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.1" leak_tracker: dependency: transitive description: @@ -192,6 +208,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.2" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" vector_math: dependency: transitive description: @@ -208,6 +232,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.5" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.5.0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.yaml b/pubspec.yaml index a212f61b..8637027b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter - intl: ^0.19.0 + intl: ^0.20.0 simple_gesture_detector: ^0.2.0 dev_dependencies: From b5ad81bb491fad9ddc6957ffe35deea4ce13b9a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksander=20Wo=C5=BAniak?= Date: Wed, 8 Jan 2025 18:51:05 +0100 Subject: [PATCH 4/5] Fix empty weekendDays assertion bug --- lib/src/table_calendar.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/table_calendar.dart b/lib/src/table_calendar.dart index 9af770f0..aca0a03c 100644 --- a/lib/src/table_calendar.dart +++ b/lib/src/table_calendar.dart @@ -273,7 +273,7 @@ class TableCalendar extends StatefulWidget { }) : assert(availableCalendarFormats.keys.contains(calendarFormat)), assert(availableCalendarFormats.length <= CalendarFormat.values.length), assert( - weekendDays.isNotEmpty && + weekendDays.isEmpty || weekendDays.every( (day) => day >= DateTime.monday && day <= DateTime.sunday, ), From 5dc128b387204837d0937a0b16a00094957ed523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksander=20Wo=C5=BAniak?= Date: Wed, 8 Jan 2025 18:53:00 +0100 Subject: [PATCH 5/5] Release version 3.2.0 --- CHANGELOG.md | 6 ++++++ README.md | 2 +- example/pubspec.lock | 2 +- pubspec.yaml | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72e112ea..af61d0b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [3.2.0] + +* Added loadEventsForDisabledDays property to enable loading events for disabled days as well +* Fixed empty weekendDays assertion issue +* Updated intl version to 0.20.0 + ## [3.1.3] * Updated gradle config for example project diff --git a/README.md b/README.md index df164049..67f8fe98 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Add the following line to `pubspec.yaml`: ```yaml dependencies: - table_calendar: ^3.1.3 + table_calendar: ^3.2.0 ``` ### Basic setup diff --git a/example/pubspec.lock b/example/pubspec.lock index 0dc447c5..ede0d144 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -190,7 +190,7 @@ packages: path: ".." relative: true source: path - version: "3.1.3" + version: "3.2.0" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8637027b..c1fb94c0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: table_calendar description: Highly customizable, feature-packed calendar widget for Flutter. -version: 3.1.3 +version: 3.2.0 author: Aleksander Woźniak homepage: https://github.com/aleksanderwozniak/table_calendar