summaryrefslogtreecommitdiffstats
path: root/packages/flutter_calendar_carousel/lib/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/flutter_calendar_carousel/lib/src')
-rw-r--r--packages/flutter_calendar_carousel/lib/src/calendar_header.dart73
-rw-r--r--packages/flutter_calendar_carousel/lib/src/default_styles.dart48
-rw-r--r--packages/flutter_calendar_carousel/lib/src/weekday_row.dart131
3 files changed, 252 insertions, 0 deletions
diff --git a/packages/flutter_calendar_carousel/lib/src/calendar_header.dart b/packages/flutter_calendar_carousel/lib/src/calendar_header.dart
new file mode 100644
index 0000000..7fcfd81
--- /dev/null
+++ b/packages/flutter_calendar_carousel/lib/src/calendar_header.dart
@@ -0,0 +1,73 @@
+import 'package:flutter/material.dart';
+import 'default_styles.dart' show defaultHeaderTextStyle;
+
+class CalendarHeader extends StatelessWidget {
+ /// Passing in values for [leftButtonIcon] or [rightButtonIcon] will override [headerIconColor]
+ CalendarHeader(
+ {required this.headerTitle,
+ this.headerMargin,
+ required this.showHeader,
+ this.headerTextStyle,
+ this.showHeaderButtons = true,
+ this.headerIconColor,
+ this.leftButtonIcon,
+ this.rightButtonIcon,
+ required this.onLeftButtonPressed,
+ required this.onRightButtonPressed,
+ this.onHeaderTitlePressed})
+ : isTitleTouchable = onHeaderTitlePressed != null;
+
+ final String headerTitle;
+ final EdgeInsetsGeometry? headerMargin;
+ final bool showHeader;
+ final TextStyle? headerTextStyle;
+ final bool showHeaderButtons;
+ final Color? headerIconColor;
+ final Widget? leftButtonIcon;
+ final Widget? rightButtonIcon;
+ final VoidCallback onLeftButtonPressed;
+ final VoidCallback onRightButtonPressed;
+ final bool isTitleTouchable;
+ final VoidCallback? onHeaderTitlePressed;
+
+ TextStyle get getTextStyle => headerTextStyle ?? defaultHeaderTextStyle;
+
+ Widget _leftButton() => IconButton(
+ onPressed: onLeftButtonPressed,
+ icon:
+ leftButtonIcon ?? Icon(Icons.chevron_left, color: headerIconColor),
+ );
+
+ Widget _rightButton() => IconButton(
+ onPressed: onRightButtonPressed,
+ icon: rightButtonIcon ??
+ Icon(Icons.chevron_right, color: headerIconColor),
+ );
+
+ Widget _headerTouchable() => TextButton(
+ onPressed: onHeaderTitlePressed,
+ child: Text(
+ headerTitle,
+ semanticsLabel: headerTitle,
+ style: getTextStyle,
+ ),
+ );
+
+ @override
+ Widget build(BuildContext context) => showHeader
+ ? Container(
+ margin: headerMargin,
+ child: DefaultTextStyle(
+ style: getTextStyle,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: <Widget>[
+ showHeaderButtons ? _leftButton() : Container(),
+ isTitleTouchable
+ ? _headerTouchable()
+ : Text(headerTitle, style: getTextStyle),
+ showHeaderButtons ? _rightButton() : Container(),
+ ])),
+ )
+ : Container();
+}
diff --git a/packages/flutter_calendar_carousel/lib/src/default_styles.dart b/packages/flutter_calendar_carousel/lib/src/default_styles.dart
new file mode 100644
index 0000000..cfeddc9
--- /dev/null
+++ b/packages/flutter_calendar_carousel/lib/src/default_styles.dart
@@ -0,0 +1,48 @@
+import 'package:flutter/material.dart';
+
+const TextStyle defaultHeaderTextStyle = const TextStyle(
+ fontSize: 20.0,
+ color: Colors.blue,
+);
+const TextStyle defaultPrevDaysTextStyle = const TextStyle(
+ color: Colors.grey,
+ fontSize: 14.0,
+);
+const TextStyle defaultNextDaysTextStyle = const TextStyle(
+ color: Colors.grey,
+ fontSize: 14.0,
+);
+const TextStyle defaultDaysTextStyle = const TextStyle(
+ color: Colors.black,
+ fontSize: 14.0,
+);
+const TextStyle defaultTodayTextStyle = const TextStyle(
+ color: Colors.white,
+ fontSize: 14.0,
+);
+const TextStyle defaultSelectedDayTextStyle = const TextStyle(
+ color: Colors.white,
+ fontSize: 14.0,
+);
+const TextStyle defaultWeekdayTextStyle = const TextStyle(
+ color: Colors.deepOrange,
+ fontSize: 14.0,
+);
+const TextStyle defaultWeekendTextStyle = const TextStyle(
+ color: Colors.pinkAccent,
+ fontSize: 14.0,
+);
+const TextStyle defaultInactiveDaysTextStyle = const TextStyle(
+ color: Colors.black38,
+ fontSize: 14.0,
+);
+final TextStyle defaultInactiveWeekendTextStyle = TextStyle(
+ color: Colors.pinkAccent.withOpacity(0.6),
+ fontSize: 14.0,
+);
+final Widget defaultMarkedDateWidget = Container(
+ margin: EdgeInsets.symmetric(horizontal: 1.0),
+ color: Colors.blueAccent,
+ height: 4.0,
+ width: 4.0,
+);
diff --git a/packages/flutter_calendar_carousel/lib/src/weekday_row.dart b/packages/flutter_calendar_carousel/lib/src/weekday_row.dart
new file mode 100644
index 0000000..48f5b3a
--- /dev/null
+++ b/packages/flutter_calendar_carousel/lib/src/weekday_row.dart
@@ -0,0 +1,131 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_calendar_carousel/flutter_calendar_carousel.dart';
+import 'package:flutter_calendar_carousel/src/default_styles.dart'
+ show defaultWeekdayTextStyle;
+import 'package:intl/intl.dart';
+
+class WeekdayRow extends StatelessWidget {
+ WeekdayRow(this.firstDayOfWeek, this.customWeekdayBuilder,
+ {required this.showWeekdays,
+ required this.weekdayFormat,
+ required this.weekdayMargin,
+ required this.weekdayPadding,
+ required this.weekdayBackgroundColor,
+ required this.weekdayTextStyle,
+ required this.localeDate});
+
+ final WeekdayBuilder? customWeekdayBuilder;
+ final bool showWeekdays;
+ final WeekdayFormat weekdayFormat;
+ final EdgeInsets weekdayMargin;
+ final EdgeInsets weekdayPadding;
+ final Color weekdayBackgroundColor;
+ final TextStyle? weekdayTextStyle;
+ final DateFormat localeDate;
+ final int firstDayOfWeek;
+
+ Widget _weekdayContainer(int weekday, String weekDayName) {
+ final customWeekdayBuilder = this.customWeekdayBuilder;
+ return customWeekdayBuilder != null
+ ? customWeekdayBuilder(weekday, weekDayName)
+ : Expanded(
+ child: Container(
+ decoration: BoxDecoration(
+ border: Border.all(color: weekdayBackgroundColor),
+ color: weekdayBackgroundColor,
+ ),
+ margin: weekdayMargin,
+ padding: weekdayPadding,
+ child: Center(
+ child: DefaultTextStyle(
+ style: defaultWeekdayTextStyle,
+ child: Text(
+ weekDayName,
+ semanticsLabel: weekDayName,
+ style: weekdayTextStyle,
+ ),
+ ),
+ ),
+ ));
+ }
+
+// List<Widget> _generateWeekdays() {
+// switch (weekdayFormat) {
+// case WeekdayFormat.weekdays:
+// return localeDate.dateSymbols.WEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// case WeekdayFormat.standalone:
+// return localeDate.dateSymbols.STANDALONEWEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// case WeekdayFormat.short:
+// return localeDate.dateSymbols.SHORTWEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// case WeekdayFormat.standaloneShort:
+// return localeDate.dateSymbols.STANDALONESHORTWEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// case WeekdayFormat.narrow:
+// return localeDate.dateSymbols.NARROWWEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// case WeekdayFormat.standaloneNarrow:
+// return localeDate.dateSymbols.STANDALONENARROWWEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// default:
+// return localeDate.dateSymbols.STANDALONEWEEKDAYS
+// .map<Widget>(_weekdayContainer)
+// .toList();
+// }
+// }
+
+ // TODO - locale issues
+ List<Widget> _renderWeekDays() {
+ List<Widget> list = [];
+
+ /// because of number of days in a week is 7, so it would be easier to count it til 7.
+ for (var i = firstDayOfWeek, count = 0;
+ count < 7;
+ i = (i + 1) % 7, count++) {
+ String weekDay;
+
+ switch (weekdayFormat) {
+ case WeekdayFormat.weekdays:
+ weekDay = localeDate.dateSymbols.WEEKDAYS[i];
+ break;
+ case WeekdayFormat.standalone:
+ weekDay = localeDate.dateSymbols.STANDALONEWEEKDAYS[i];
+ break;
+ case WeekdayFormat.short:
+ weekDay = localeDate.dateSymbols.SHORTWEEKDAYS[i];
+ break;
+ case WeekdayFormat.standaloneShort:
+ weekDay = localeDate.dateSymbols.STANDALONESHORTWEEKDAYS[i];
+ break;
+ case WeekdayFormat.narrow:
+ weekDay = localeDate.dateSymbols.NARROWWEEKDAYS[i];
+ break;
+ case WeekdayFormat.standaloneNarrow:
+ weekDay = localeDate.dateSymbols.STANDALONENARROWWEEKDAYS[i];
+ break;
+ default:
+ weekDay = localeDate.dateSymbols.STANDALONEWEEKDAYS[i];
+ break;
+ }
+ list.add(_weekdayContainer(count, weekDay));
+ }
+
+ return list;
+ }
+
+ @override
+ Widget build(BuildContext context) => showWeekdays
+ ? Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: _renderWeekDays(),
+ )
+ : Container();
+}