You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,8 @@
1
1
# [Unreleased - 29 May 2026]
2
2
3
+
- Added `ScheduleView`, a scrollable, agenda-style calendar that groups events by day and month. [#101](https://github.com/SimformSolutionsPvtLtd/flutter_calendar_view/issues/101)
4
+
- Added localized `months` and `monthsAbbr` fields to `CalendarLocalizations`, with the `DateTime.getMonthName({abbreviated})` and `DateTime.getMonthYear({abbreviatedMonth})` extensions.
5
+
- Added `BuildContextThemeExtension` to public API for accessing calendar view themes via `context.dayViewColors`, `context.weekViewColors`, etc.
3
6
-[BREAKING] Changed `RecurrenceSettings.weekdays` type from `List<int>` to `List<WeekDays>`. [#509](https://github.com/SimformSolutionsPvtLtd/flutter_calendar_view/issues/509)
4
7
-[BREAKING]`WeekDayBuilder`'s parameter changed from `int day` to `WeekDays weekDay`.
5
8
-[BREAKING] Removed `startTime` and `endTime` from `CalendarEventData` constructor and `copyWith` parameters. Time is now embedded in the `date` and `endDate``DateTime` parameters. [#231](https://github.com/SimformSolutionsPvtLtd/flutter_calendar_view/issues/231)
Copy file name to clipboardExpand all lines: doc/documentation.md
+133Lines changed: 133 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,7 @@ This package is a comprehensive Flutter solution that enables you to easily impl
14
14
- Day View
15
15
- Week View
16
16
- MultiDay View
17
+
- Schedule View
17
18
- Highly customisable UI components
18
19
- Manage events (add, remove, update)
19
20
- Manage reminders (add, remove, update)
@@ -109,6 +110,14 @@ Scaffold(
109
110
);
110
111
```
111
112
113
+
### Schedule View
114
+
115
+
```dart
116
+
Scaffold(
117
+
body: ScheduleView(),
118
+
);
119
+
```
120
+
112
121
## Managing Events
113
122
114
123
### Adding an event
@@ -557,6 +566,84 @@ MultiDayView(
557
566
);
558
567
```
559
568
569
+
## Schedule View Customization
570
+
571
+
`ScheduleView` is a scrollable, agenda-style calendar that groups events by day and month. Months are built lazily as they scroll into view, and the list is anchored at `initialDay`.
572
+
573
+
```dart
574
+
ScheduleView(
575
+
controller: EventController(),
576
+
// Anchor and date boundaries
577
+
initialDay: DateTime.now(), // Date pinned to the top of the viewport
578
+
minDay: DateTime(2000), // Earliest date the view will display
579
+
maxDay: DateTime(2050), // Latest date the view will display
580
+
// Which days/months are rendered
581
+
showEmptyMonths: true, // Render months that contain no events (default true)
582
+
showDaysWithoutEvents: false, // Render a row for every day, even empty ones (default false)
583
+
// Date placement
584
+
dateLayout: ScheduleDateLayout.left, // .left (date column) or .top (full-width date header)
// Boundary callbacks (fire once when each end of the range is reached)
621
+
onHasReachedStart: () => print('Reached earliest available month'),
622
+
onHasReachedEnd: () => print('Reached latest available month'),
623
+
// Appearance
624
+
backgroundColor: Colors.white,
625
+
width: 400, // Explicit width; null fills available space
626
+
scrollPhysics: const BouncingScrollPhysics(),
627
+
);
628
+
```
629
+
630
+
### Navigating programmatically
631
+
632
+
Use a `GlobalKey<ScheduleViewState>` to jump to a specific date. The target date is pinned to the top of the viewport, with earlier days reachable by scrolling up.
-**Sparse (default)** — `showEmptyMonths: false` and `showDaysWithoutEvents: false`. Only days with events (plus today) render, and the scrollable range is clamped to the actual extent of the controller's events. This keeps the view responsive even when `minDay`/`maxDay` span decades.
645
+
-**Dense** — set `showEmptyMonths: true` (default) to always render every month in range, and/or `showDaysWithoutEvents: true` to render a row for every day.
646
+
560
647
## Show Only Working Days in `WeekView`
561
648
562
649
You can control visible weekdays using the `weekDays` parameter:
@@ -833,6 +920,7 @@ The package supports dark mode out of the box. Each calendar view has a dedicate
833
920
|`DayViewThemeData`|`DayView`|
834
921
|`WeekViewThemeData`|`WeekView`|
835
922
|`MultiDayViewThemeData`|`MultiDayView`|
923
+
|`ScheduleViewThemeData`|`ScheduleView`|
836
924
837
925
## Default colours
838
926
@@ -902,6 +990,25 @@ The package supports dark mode out of the box. Each calendar view has a dedicate
To customise `MonthView`, `DayView`, `WeekView` & `MultiDayView` page header use `HeaderStyle`.
906
1013
907
1014
```dart
@@ -929,6 +1036,7 @@ There are two main ways to customize the theme for calendar views:
929
1036
dayViewTheme: DayViewThemeData.light(),
930
1037
weekViewTheme: WeekViewThemeData.light(),
931
1038
multiDayViewTheme: MultiDayViewThemeData.light(),
1039
+
scheduleViewTheme: ScheduleViewThemeData.light(),
932
1040
),
933
1041
child: YourApp(),
934
1042
)
@@ -949,6 +1057,7 @@ There are two main ways to customize the theme for calendar views:
949
1057
DayViewThemeData.light(),
950
1058
WeekViewThemeData.light(),
951
1059
MultiDayViewThemeData.light(),
1060
+
ScheduleViewThemeData.light(),
952
1061
],
953
1062
);
954
1063
```
@@ -1091,6 +1200,30 @@ Hide divider in multiday view.
1091
1200
dividerSettings: DividerSettings.none(),
1092
1201
```
1093
1202
1203
+
### Schedule View
1204
+
* All schedule colours resolve from `ScheduleViewThemeData` (`context.scheduleViewColors`), falling back to `.light()` / `.dark()` based on `Theme.of(context).brightness`.
1205
+
* Today's date badge uses `todayHighlightColor` (background) and `todayTextColor` (number). Other dates use `dateTextColor`, and weekday abbreviations use `weekdayTextColor`.
1206
+
* Event tiles tint the event's own colour by `eventTileAlpha`; the time label is adjusted by `eventTimeColorLightnessAdjust`. Title and secondary text use `eventTitleColor` and `eventSecondaryTextColor`.
1207
+
* Empty-state labels (per-day placeholder and the past/future sentinels) use `emptyContentColor`.
1208
+
* The month-header image overlay uses `monthHeaderGradientStartColor` → `monthHeaderGradientEndColor`, with `monthHeaderTextColor` and `monthHeaderTextShadowColor` for the title.
1209
+
* In `ScheduleDateLayout.top`, the divider beneath the default date header uses `dateDividerColor`; override it per-widget with `defaultDateHeaderDividerSettings` (use `DividerSettings.none()` to hide it).
0 commit comments