From 3e437061aa38e1d2e71cb7567fb4dba50798f3aa Mon Sep 17 00:00:00 2001 From: Dipanshu Singh Date: Wed, 21 Jul 2021 13:49:22 +0530 Subject: [PATCH 1/3] adds an option to set date time sequence and shape of selected date --- README.md | 2 ++ .../ios/Flutter/flutter_export_environment.sh | 12 +++---- example/pubspec.lock | 6 ++-- lib/date_picker_widget.dart | 14 ++++++-- lib/date_widget.dart | 36 +++++++++++++------ pubspec.lock | 6 ++-- 6 files changed, 51 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index d7049d1..ac4244c 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,8 @@ DatePicker( this.daysCount, this.onDateChange, this.locale = "en_US", + this.dateSequence = const [TimeType.Month, TimeType.Date, TimeType.WeekDay], + this.selectedDateShape = BoxShape.rectangle, }) : super(key: key); ``` diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh index 5db6e80..10f17a7 100755 --- a/example/ios/Flutter/flutter_export_environment.sh +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -1,14 +1,14 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/vivek/development/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/vivek/StudioProjects/DatePickerTimelineFlutter/example" -export "FLUTTER_TARGET=/Users/vivek/StudioProjects/DatePickerTimelineFlutter/example/lib/main.dart" +export "FLUTTER_ROOT=/Users/dipanshu/.flutter-2.2" +export "FLUTTER_APPLICATION_PATH=/Users/dipanshu/StudioProjects/DatePickerTimelineFlutter/example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "SYMROOT=${SOURCE_ROOT}/../build/ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" -export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue" export "DART_OBFUSCATION=false" -export "TRACK_WIDGET_CREATION=true" +export "TRACK_WIDGET_CREATION=false" export "TREE_SHAKE_ICONS=false" -export "PACKAGE_CONFIG=/Users/vivek/StudioProjects/DatePickerTimelineFlutter/example/.dart_tool/package_config.json" +export "PACKAGE_CONFIG=.packages" diff --git a/example/pubspec.lock b/example/pubspec.lock index c36cbe3..32ea154 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0" + version: "2.6.1" boolean_selector: dependency: transitive description: @@ -113,7 +113,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.1" stack_trace: dependency: transitive description: @@ -148,7 +148,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19" + version: "0.3.0" typed_data: dependency: transitive description: diff --git a/lib/date_picker_widget.dart b/lib/date_picker_widget.dart index 14ca445..b7c3414 100644 --- a/lib/date_picker_widget.dart +++ b/lib/date_picker_widget.dart @@ -1,5 +1,3 @@ - - import 'package:date_picker_timeline/date_widget.dart'; import 'package:date_picker_timeline/extra/color.dart'; import 'package:date_picker_timeline/extra/style.dart'; @@ -7,6 +5,8 @@ import 'package:date_picker_timeline/gestures/tap.dart'; import 'package:flutter/material.dart'; import 'package:intl/date_symbol_data_local.dart'; +enum DateTimeType { Month, Date, WeekDay } + class DatePicker extends StatefulWidget { /// Start Date in case user wants to show past dates /// If not provided calendar will start from the initialSelectedDate @@ -60,6 +60,12 @@ class DatePicker extends StatefulWidget { /// Locale for the calendar default: en_us final String locale; + /// Sequence of Date shown to the user - from top to bottom + final List dateSequence; + + /// Shape of selected date + final BoxShape selectedDateShape; + DatePicker( this.startDate, { Key? key, @@ -78,6 +84,8 @@ class DatePicker extends StatefulWidget { this.daysCount = 500, this.onDateChange, this.locale = "en_US", + this.dateSequence = const [DateTimeType.Month, DateTimeType.Date, DateTimeType.WeekDay], + this.selectedDateShape = BoxShape.rectangle, }) : assert( activeDates == null || inactiveDates == null, "Can't " @@ -206,6 +214,8 @@ class _DatePickerState extends State { _currentDate = selectedDate; }); }, + dateSequence: widget.dateSequence, + shape: widget.selectedDateShape, ); }, ), diff --git a/lib/date_widget.dart b/lib/date_widget.dart index 1eb13f4..819e4ba 100644 --- a/lib/date_widget.dart +++ b/lib/date_widget.dart @@ -4,7 +4,7 @@ /// Author: Vivek Kaushik /// github: https://github.com/iamvivekkaushik/ /// *** - +import 'package:date_picker_timeline/date_picker_timeline.dart'; import 'package:date_picker_timeline/gestures/tap.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -16,6 +16,8 @@ class DateWidget extends StatelessWidget { final Color selectionColor; final DateSelectionCallback? onDateSelected; final String? locale; + final BoxShape shape; + final List dateSequence; DateWidget({ required this.date, @@ -23,6 +25,8 @@ class DateWidget extends StatelessWidget { required this.dayTextStyle, required this.dateTextStyle, required this.selectionColor, + required this.dateSequence, + required this.shape, this.width, this.onDateSelected, this.locale, @@ -35,22 +39,17 @@ class DateWidget extends StatelessWidget { width: width, margin: EdgeInsets.all(3.0), decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(8.0)), + shape: shape, + borderRadius: shape == BoxShape.rectangle ? BorderRadius.all(Radius.circular(8.0)) : null, color: selectionColor, ), child: Padding( padding: EdgeInsets.all(8), child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + /// making the column center aligned for a fewer options + mainAxisAlignment: dateSequence.length <= 2 ? MainAxisAlignment.center : MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text(new DateFormat("MMM", locale).format(date).toUpperCase(), // Month - style: monthTextStyle), - Text(date.day.toString(), // Date - style: dateTextStyle), - Text(new DateFormat("E", locale).format(date).toUpperCase(), // WeekDay - style: dayTextStyle) - ], + children: List.generate(dateSequence.length, (index) => _dateTimeWidget(dateSequence[index])), ), ), ), @@ -63,4 +62,19 @@ class DateWidget extends StatelessWidget { }, ); } + + /// method to get the widgets for month, date and day + _dateTimeWidget(DateTimeType dateSequence) { + switch (dateSequence) { + case DateTimeType.Month: + return Text(DateFormat("MMM", locale).format(date).toUpperCase(), // Month + style: monthTextStyle); + case DateTimeType.Date: + return Text(date.day.toString(), // Date + style: dateTextStyle); + case DateTimeType.WeekDay: + return Text(DateFormat("E", locale).format(date).toUpperCase(), // WeekDay + style: dayTextStyle); + } + } } diff --git a/pubspec.lock b/pubspec.lock index a38f32a..cda6e0d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0" + version: "2.6.1" boolean_selector: dependency: transitive description: @@ -99,7 +99,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.1" stack_trace: dependency: transitive description: @@ -134,7 +134,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19" + version: "0.3.0" typed_data: dependency: transitive description: From 6e50681172820782b78b80c4e89f142c9530a46f Mon Sep 17 00:00:00 2001 From: Dipanshu Singh Date: Wed, 21 Jul 2021 13:57:03 +0530 Subject: [PATCH 2/3] reverts example folder changes --- example/ios/Flutter/flutter_export_environment.sh | 12 ++++++------ example/pubspec.lock | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh index 10f17a7..5db6e80 100755 --- a/example/ios/Flutter/flutter_export_environment.sh +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -1,14 +1,14 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/dipanshu/.flutter-2.2" -export "FLUTTER_APPLICATION_PATH=/Users/dipanshu/StudioProjects/DatePickerTimelineFlutter/example" -export "COCOAPODS_PARALLEL_CODE_SIGN=true" -export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_ROOT=/Users/vivek/development/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/vivek/StudioProjects/DatePickerTimelineFlutter/example" +export "FLUTTER_TARGET=/Users/vivek/StudioProjects/DatePickerTimelineFlutter/example/lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "SYMROOT=${SOURCE_ROOT}/../build/ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" +export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue" export "DART_OBFUSCATION=false" -export "TRACK_WIDGET_CREATION=false" +export "TRACK_WIDGET_CREATION=true" export "TREE_SHAKE_ICONS=false" -export "PACKAGE_CONFIG=.packages" +export "PACKAGE_CONFIG=/Users/vivek/StudioProjects/DatePickerTimelineFlutter/example/.dart_tool/package_config.json" diff --git a/example/pubspec.lock b/example/pubspec.lock index 32ea154..c36cbe3 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.6.1" + version: "2.5.0" boolean_selector: dependency: transitive description: @@ -113,7 +113,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.0" stack_trace: dependency: transitive description: @@ -148,7 +148,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.2.19" typed_data: dependency: transitive description: From ff26f956e8c693e5e6b6de84434f70c666687602 Mon Sep 17 00:00:00 2001 From: Dipanshu Singh Date: Wed, 21 Jul 2021 14:07:42 +0530 Subject: [PATCH 3/3] adds an assertion for date sequence --- lib/date_picker_widget.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/date_picker_widget.dart b/lib/date_picker_widget.dart index b7c3414..3be1dd4 100644 --- a/lib/date_picker_widget.dart +++ b/lib/date_picker_widget.dart @@ -86,7 +86,8 @@ class DatePicker extends StatefulWidget { this.locale = "en_US", this.dateSequence = const [DateTimeType.Month, DateTimeType.Date, DateTimeType.WeekDay], this.selectedDateShape = BoxShape.rectangle, - }) : assert( + }) : assert(dateSequence.isNotEmpty, "Date sequence can't be empty!"), + assert( activeDates == null || inactiveDates == null, "Can't " "provide both activated and deactivated dates List at the same time.");