horizontal_calendar
Easy to use, highly customizable horizontal calendar.
Features
[x] Custom date range (First & Last Date)
[x] Single or up to x days selection
[x] onDateSelected, onDateUnSelected, onDateLongTap, onMaxDateSelectionReached events.
[x] Support custom ScrollController
[x] Initial selected dates
[x] Granular control to disable dates.
[x] Internationalization support
[x] Month / Date / Week Day label order customization
[x] Month / Week day label hide / show
[x] Custom TextStyles for Month, Date, WeekDay
[x] Custom TextStyles for selected Month, selected Date, selected WeekDay
[x] Customizable month format (e.g. MM,MMM)
[x] Customizable date format (e.g. dd,d)
[x] Customizable week day format (e.g. EE,EEE)
[x] Default date cell Decoration
[x] Selected date cell Decoration
[x] Disabled date cell Decoration
Properties
| Property Name | Property Type | Description | Default value |
|---|---|---|---|
| height | double | Height of widget | 100 |
| firstDate | DateTime | First Date of calendar | – |
| lastDate | DateTime | Last Date of calendar | – |
| maxSelectedDateCount | int | Count of max selectable dates | 1 |
| onDateSelected | Function(DateTime dateTime) | Callback when date is selected | – |
| onDateLongTap | Function(DateTime dateTime) | Callback when date cell is long pressed | – |
| onDateUnSelected | Function(DateTime dateTime) | Callback when date is unselected | – |
| onMaxDateSelectionReached | VoidCallback | Callback when max date selection count is reached | – |
| initialSelectedDates | List<DateTime> | List of initially selected dates | Empty List |
| isDateDisabled | bool Function(DateTime dateTime) | Function that returns bool to check if particular date is disabled | – |
| labelOrder | List<LabelType> | Order of labels | [ LabelType.month, LabelType.date, LabelType.weekday] |
| scrollController | ScrollController | Scroll Controller of horizontal list | – |
| monthTextStyle | TextStyle | Month label TextStyle | titleTheme |
| selectedMonthTextStyle | TextStyle | Selected Month label TextStyle | monthTextStyle |
| monthFormat | String | Format of month | MMM |
| dateTextStyle | TextStyle | Date label TextStyle | subTitleTheme |
| selectedDateTextStyle | TextStyle | Selected Date label TextStyle | dateTextStyle |
| dateFormat | String | Format of date | dd |
| weekDayTextStyle | TextStyle | Week day label TextStyle | subTitleTheme |
| selectedWeekDayTextStyle | TextStyle | Selected Week day label TextStyle | dateTextStyle |
| weekDayFormat | String | Format of week day | EEE |
| defaultDecoration | Decoration | Default Decoration to be applied to date cell | – |
| selectedDecoration | Decoration | Decoration to be applied to selected date cell | – |
| disabledDecoration | Decoration | Decoration to be applied to disabled date cell | – |
| spacingBetweenDates | double | Spacing between two cells of date | 8.0 |
| padding | EdgeInsetsGeometry | Padding to date cell | EdgeInsets.all(8.0) |
State Management in horizontal_calendar
initialSelectedDates will only be taken when the widget built for the first time. horizontal_calendar will manage the Subsequent dates selection and un selection.
To get the initial control over the host app, one can pass the UniqueKey.
e.g.
HorizontalCalendar(
key: UniqueKey(),
);
Issues and Feedback
- For any issue and feedback please create issue on Github repo.
Source Code
Please Visit Flutter Horizontal Calendar Source Code at GitHub




