From 8c452ca435e1afe296838aabc55e7b785a90ea31 Mon Sep 17 00:00:00 2001 From: Tanmay Pandharipande Date: Sat, 16 May 2020 11:17:39 +0530 Subject: [PATCH 1/3] Adding support of list of months with same daysCount param and passing timelineType as TimelineType.MONTH --- example/lib/main.dart | 1 + lib/date_picker_timeline.dart | 1 + lib/date_picker_widget.dart | 108 +++++++++++++++++++++++++++++----- lib/extra/dimen.dart | 1 + lib/extra/style.dart | 7 +++ lib/month_widget.dart | 58 ++++++++++++++++++ lib/timelineType.dart | 1 + 7 files changed, 161 insertions(+), 16 deletions(-) create mode 100644 lib/month_widget.dart create mode 100644 lib/timelineType.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index b35e193..64b7608 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -70,6 +70,7 @@ class _MyHomePageState extends State { initialSelectedDate: DateTime.now(), selectionColor: Colors.black, selectedTextColor: Colors.white, +// timelineType: TimelineType.MONTH, onDateChange: (date) { // New date selected setState(() { diff --git a/lib/date_picker_timeline.dart b/lib/date_picker_timeline.dart index dea4fb8..281af9e 100644 --- a/lib/date_picker_timeline.dart +++ b/lib/date_picker_timeline.dart @@ -1,3 +1,4 @@ library date_picker_timeline; export 'date_picker_widget.dart'; +export 'timelineType.dart'; diff --git a/lib/date_picker_widget.dart b/lib/date_picker_widget.dart index c2a3dff..26ce6e3 100644 --- a/lib/date_picker_widget.dart +++ b/lib/date_picker_widget.dart @@ -2,6 +2,8 @@ import 'package:date_picker_timeline/date_widget.dart'; import 'package:date_picker_timeline/extra/color.dart'; import 'package:date_picker_timeline/extra/style.dart'; import 'package:date_picker_timeline/gestures/tap.dart'; +import 'package:date_picker_timeline/month_widget.dart'; +import 'package:date_picker_timeline/timelineType.dart'; import 'package:flutter/material.dart'; import 'package:intl/date_symbol_data_local.dart'; @@ -34,6 +36,9 @@ class DatePicker extends StatefulWidget { /// TextStyle for the date Value final TextStyle dateTextStyle; + /// TextStyle for the year Value + final TextStyle yearTextStyle; + /// Current Selected Date final DateTime initialSelectedDate; @@ -47,8 +52,12 @@ class DatePicker extends StatefulWidget { /// Locale for the calendar default: en_us final String locale; - DatePicker( - this.startDate, { + /// Setting the TimelineType + /// TimelineType.DAY & TimelineType.MONTH + /// Default is TimelineType.DAY + final TimelineType timelineType; + + DatePicker(this.startDate, { Key key, this.width = 60, this.height = 80, @@ -56,12 +65,14 @@ class DatePicker extends StatefulWidget { this.monthTextStyle = defaultMonthTextStyle, this.dayTextStyle = defaultDayTextStyle, this.dateTextStyle = defaultDateTextStyle, + this.yearTextStyle = defaultYearTextStyle, this.selectedTextColor = Colors.white, this.selectionColor = AppColors.defaultSelectionColor, this.initialSelectedDate, this.daysCount = 500, this.onDateChange, this.locale = "en_US", + this.timelineType = TimelineType.DAY }) : super(key: key); @override @@ -76,10 +87,16 @@ class _DatePickerState extends State { TextStyle selectedDateStyle; TextStyle selectedMonthStyle; TextStyle selectedDayStyle; + TextStyle selectedYearStyle; + //For Creation of month data + DateTime _monthStartDate; + int _monthDayCount; + List monthList; + // @override void initState() { - // Init the calendar locale + monthList = new List(); initializeDateFormatting(widget.locale, null); // Set initial Values _currentDate = widget.initialSelectedDate; @@ -91,7 +108,11 @@ class _DatePickerState extends State { this.selectedDateStyle = createTextStyle(widget.dateTextStyle); this.selectedMonthStyle = createTextStyle(widget.monthTextStyle); this.selectedDayStyle = createTextStyle(widget.dayTextStyle); - + this.selectedYearStyle = createTextStyle(widget.yearTextStyle); + WidgetsBinding.instance.addPostFrameCallback((_) async { + //Creating month data + await monthDataCreation(); + }); super.initState(); } @@ -111,9 +132,23 @@ class _DatePickerState extends State { } } + ///Creating month data on basis of daysCount parameter passed + ///Selected month will give First Day of the month on selected. + monthDataCreation() async { + _monthStartDate = widget.startDate; + _monthDayCount = 0; + setState(() { + while (_monthDayCount < widget.daysCount) { + monthList.add(DateTime(_monthStartDate.year, _monthStartDate.month, 01)); + _monthStartDate = _monthStartDate.add(Duration(days: 31)); + _monthDayCount++; + } + }); + } + @override Widget build(BuildContext context) { - return Container( + return widget.timelineType == TimelineType.DAY ? Container( height: widget.height, child: ListView.builder( itemCount: widget.daysCount, @@ -123,24 +158,57 @@ class _DatePickerState extends State { // get the date object based on the index position // if widget.startDate is null then use the initialDateValue DateTime date; - DateTime _date = widget.startDate.add(Duration(days: index)); - date = new DateTime(_date.year, _date.month, _date.day); + bool isSelected = false; - // Check if this date is the one that is currently selected - bool isSelected = _compareDate(date, _currentDate); + if (widget.timelineType == TimelineType.DAY) { + DateTime _date = widget.startDate.add(Duration(days: index)); + date = new DateTime(_date.year, _date.month, _date.day); + // Check if this date is the one that is currently selected + isSelected = _compareDate(date, _currentDate); + } // Return the Date Widget return DateWidget( date: date, monthTextStyle: - isSelected ? selectedMonthStyle : widget.monthTextStyle, + isSelected ? selectedMonthStyle : widget.monthTextStyle, dateTextStyle: - isSelected ? selectedDateStyle : widget.dateTextStyle, + isSelected ? selectedDateStyle : widget.dateTextStyle, dayTextStyle: isSelected ? selectedDayStyle : widget.dayTextStyle, width: widget.width, locale: widget.locale, selectionColor: - isSelected ? widget.selectionColor : Colors.transparent, + isSelected ? widget.selectionColor : Colors.transparent, + onDateSelected: (selectedDate) { + // A date is selected + if (widget.onDateChange != null) { + widget.onDateChange(selectedDate); + } + setState(() { + _currentDate = selectedDate; + }); + }, + ); + }, + ), + ) : Container( + height: widget.height, + child: ListView.builder( + itemCount: monthList.length, + scrollDirection: Axis.horizontal, + controller: _controller, + itemBuilder: (context, index) { + bool isSelected = _compareMonth(monthList[index], _currentDate); + // Return the Date Widget + return MonthWidget( + date: monthList[index], + monthTextStyle: + isSelected ? selectedMonthStyle : widget.monthTextStyle, + yearTextStyle: isSelected ? selectedYearStyle : widget.yearTextStyle, + width: widget.width, + locale: widget.locale, + selectionColor: + isSelected ? widget.selectionColor : Colors.transparent, onDateSelected: (selectedDate) { // A date is selected if (widget.onDateChange != null) { @@ -163,6 +231,12 @@ class _DatePickerState extends State { date1.month == date2.month && date1.year == date2.year; } + + /// Helper function to compare two dates (month & year) + /// Returns True if both dates(month & year) are the same + bool _compareMonth(DateTime date1, DateTime date2) { + return date1.month == date2.month && date1.year == date2.year; + } } class DatePickerController { @@ -174,7 +248,7 @@ class DatePickerController { void jumpToSelection() { assert(_datePickerState != null, - 'DatePickerController is not attached to any DatePicker View.'); + 'DatePickerController is not attached to any DatePicker View.'); // jump to the current Date _datePickerState._controller @@ -185,7 +259,7 @@ class DatePickerController { void animateToSelection( {duration = const Duration(milliseconds: 500), curve = Curves.linear}) { assert(_datePickerState != null, - 'DatePickerController is not attached to any DatePicker View.'); + 'DatePickerController is not attached to any DatePicker View.'); // animate to the current date _datePickerState._controller.animateTo( @@ -199,7 +273,7 @@ class DatePickerController { void animateToDate(DateTime date, {duration = const Duration(milliseconds: 500), curve = Curves.linear}) { assert(_datePickerState != null, - 'DatePickerController is not attached to any DatePicker View.'); + 'DatePickerController is not attached to any DatePicker View.'); _datePickerState._controller.animateTo(_calculateDateOffset(date), duration: duration, curve: curve); @@ -208,7 +282,9 @@ class DatePickerController { /// Calculate the number of pixels that needs to be scrolled to go to the /// date provided in the argument double _calculateDateOffset(DateTime date) { - int offset = date.difference(_datePickerState.widget.startDate).inDays + 1; + int offset = date + .difference(_datePickerState.widget.startDate) + .inDays + 1; return (offset * _datePickerState.widget.width) + (offset * 6); } } diff --git a/lib/extra/dimen.dart b/lib/extra/dimen.dart index a5d3179..d86e8b3 100644 --- a/lib/extra/dimen.dart +++ b/lib/extra/dimen.dart @@ -11,4 +11,5 @@ class Dimen { static const double dateTextSize = 24; static const double dayTextSize = 11; static const double monthTextSize = 11; + static const double yearTextSize = 15; } diff --git a/lib/extra/style.dart b/lib/extra/style.dart index a72aa53..6ad3605 100644 --- a/lib/extra/style.dart +++ b/lib/extra/style.dart @@ -19,3 +19,10 @@ const TextStyle defaultDayTextStyle = TextStyle( fontSize: Dimen.dayTextSize, fontWeight: FontWeight.w500, ); + + +const TextStyle defaultYearTextStyle = TextStyle( + color: AppColors.defaultDayColor, + fontSize: Dimen.yearTextSize, + fontWeight: FontWeight.w500, +); diff --git a/lib/month_widget.dart b/lib/month_widget.dart new file mode 100644 index 0000000..988323e --- /dev/null +++ b/lib/month_widget.dart @@ -0,0 +1,58 @@ +import 'package:date_picker_timeline/gestures/tap.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; + +class MonthWidget extends StatelessWidget { + final double width; + final DateTime date; + final TextStyle monthTextStyle,yearTextStyle; + final Color selectionColor; + final DateSelectionCallback onDateSelected; + final String locale; + + MonthWidget( + {@required this.date, + @required this.monthTextStyle, + @required this.yearTextStyle, + @required this.selectionColor, + this.width, + this.onDateSelected, + this.locale, + }); + + @override + Widget build(BuildContext context) { + return InkWell( + child: Container( + width: width, + margin: EdgeInsets.all(3.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(8.0)), + color: selectionColor, + ), + child: Padding( + padding: EdgeInsets.all(8), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Text(new DateFormat("yyyy", locale).format(date).toUpperCase(), // Month + style: yearTextStyle), + ), + Text(new DateFormat("MMM", locale).format(date).toUpperCase(), // Month + style: monthTextStyle), + ], + ), + ), + ), + onTap: () { + // Check if onDateSelected is not null + if (onDateSelected != null) { + // Call the onDateSelected Function + onDateSelected(this.date); + } + }, + ); + } +} diff --git a/lib/timelineType.dart b/lib/timelineType.dart new file mode 100644 index 0000000..167305a --- /dev/null +++ b/lib/timelineType.dart @@ -0,0 +1 @@ +enum TimelineType { DAY, MONTH } \ No newline at end of file From 892e20f8bafb541b2b128bc8dc203677b8e95236 Mon Sep 17 00:00:00 2001 From: Tanmay Pandharipande Date: Sat, 16 May 2020 11:37:52 +0530 Subject: [PATCH 2/3] Adding monthDatePicker image --- screenshots/monthDatePicker.png | Bin 0 -> 59415 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshots/monthDatePicker.png diff --git a/screenshots/monthDatePicker.png b/screenshots/monthDatePicker.png new file mode 100644 index 0000000000000000000000000000000000000000..089eb6ba22f076bc44a67aca2424b9eca297e88e GIT binary patch literal 59415 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 literal 0 HcmV?d00001 From 4f2c23d1f67f2e250bb241bcfcf9254c5eac0ec3 Mon Sep 17 00:00:00 2001 From: Tanmay Pandharipande Date: Sat, 16 May 2020 11:42:16 +0530 Subject: [PATCH 3/3] Update README.md --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a1ec939..759d267 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ Flutter Date Picker Library that provides a calendar as a horizontal timeline.

+

+ +

+ ## How To Use Import the following package in your dart file @@ -31,6 +35,7 @@ Column( initialSelectedDate: DateTime.now(), selectionColor: Colors.black, selectedTextColor: Colors.white, + // timelineType: TimelineType.MONTH, onDateChange: (date) { // New date selected setState(() { @@ -45,8 +50,7 @@ Column( ##### Constructor: ```dart -DatePicker( - this.startDate, { +DatePicker(this.startDate, { Key key, this.width = 60, this.height = 80, @@ -54,13 +58,15 @@ DatePicker( this.monthTextStyle = defaultMonthTextStyle, this.dayTextStyle = defaultDayTextStyle, this.dateTextStyle = defaultDateTextStyle, + this.yearTextStyle = defaultYearTextStyle, this.selectedTextColor = Colors.white, this.selectionColor = AppColors.defaultSelectionColor, this.initialSelectedDate, this.daysCount = 500, this.onDateChange, this.locale = "en_US", -}) : super(key: key); + this.timelineType = TimelineType.DAY + }) : super(key: key); ``` Author