From 159da57f5a0569dbe2965e170dde3df84714e5e3 Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 10:45:34 +0100 Subject: [PATCH 1/7] Add support to borderRadius property --- lib/flutter_datetime_picker.dart | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index dba6b566..1480f55d 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -241,6 +241,7 @@ class _DatePickerRoute extends PopupRoute { locale: this.locale, route: this, pickerModel: pickerModel, + borderRadius: theme.borderRadius, ), ); return InheritedTheme.captureAll(context, bottomSheet); @@ -254,15 +255,18 @@ class _DatePickerComponent extends StatefulWidget { required this.pickerModel, this.onChanged, this.locale, + this.borderRadius, }) : super(key: key); - final DateChangedCallback? onChanged; - final _DatePickerRoute route; + final BasePickerModel pickerModel; + + final DateChangedCallback? onChanged; + final LocaleType? locale; - final BasePickerModel pickerModel; + final BorderRadius? borderRadius; @override State createState() { @@ -299,7 +303,8 @@ class _DatePickerState extends State<_DatePickerComponent> { animation: widget.route.animation!, builder: (BuildContext context, Widget? child) { final double bottomPadding = MediaQuery.of(context).padding.bottom; - return ClipRect( + return ClipRRect( + borderRadius: widget.borderRadius, child: CustomSingleChildLayout( delegate: _BottomPickerLayout( widget.route.animation!.value, From 3593a09a7931c4130456a6a8b183b62f89b96d4a Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 10:51:22 +0100 Subject: [PATCH 2/7] Add borderRadius property to DatePickerTheme --- lib/src/datetime_picker_theme.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/src/datetime_picker_theme.dart b/lib/src/datetime_picker_theme.dart index e3f616f4..5abf18d6 100644 --- a/lib/src/datetime_picker_theme.dart +++ b/lib/src/datetime_picker_theme.dart @@ -14,6 +14,8 @@ class DatePickerTheme with DiagnosticableTreeMixin { final double titleHeight; final double itemHeight; + final BorderRadius? borderRadius; + const DatePickerTheme({ this.cancelStyle = const TextStyle(color: Colors.black54, fontSize: 16), this.doneStyle = const TextStyle(color: Colors.blue, fontSize: 16), @@ -23,5 +25,6 @@ class DatePickerTheme with DiagnosticableTreeMixin { this.containerHeight = 210.0, this.titleHeight = 44.0, this.itemHeight = 36.0, + this.borderRadius, }); } From 626fff6caa2569d31d430fe741985f302a2e6f22 Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 11:02:57 +0100 Subject: [PATCH 3/7] Add support to borderRadius in TitleActionsView --- lib/flutter_datetime_picker.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index 1480f55d..3c37728d 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -484,6 +484,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.titleHeight, decoration: BoxDecoration( color: theme.headerColor ?? theme.backgroundColor, + borderRadius: theme.borderRadius, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, From 504ec28a1d99ca7c57c92c2772404f558e4e1554 Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 11:09:49 +0100 Subject: [PATCH 4/7] Differentiate header and picker border radii --- lib/flutter_datetime_picker.dart | 5 +++-- lib/src/datetime_picker_theme.dart | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index 3c37728d..12d80744 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -241,7 +241,7 @@ class _DatePickerRoute extends PopupRoute { locale: this.locale, route: this, pickerModel: pickerModel, - borderRadius: theme.borderRadius, + borderRadius: theme.pickerBorderRadius, ), ); return InheritedTheme.captureAll(context, bottomSheet); @@ -314,6 +314,7 @@ class _DatePickerState extends State<_DatePickerComponent> { ), child: GestureDetector( child: Material( + borderRadius: widget.borderRadius, color: theme.backgroundColor, child: _renderPickerView(theme), ), @@ -484,7 +485,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.titleHeight, decoration: BoxDecoration( color: theme.headerColor ?? theme.backgroundColor, - borderRadius: theme.borderRadius, + borderRadius: theme.headerBorderRadius, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/src/datetime_picker_theme.dart b/lib/src/datetime_picker_theme.dart index 5abf18d6..f684c9a3 100644 --- a/lib/src/datetime_picker_theme.dart +++ b/lib/src/datetime_picker_theme.dart @@ -14,7 +14,8 @@ class DatePickerTheme with DiagnosticableTreeMixin { final double titleHeight; final double itemHeight; - final BorderRadius? borderRadius; + final BorderRadius? pickerBorderRadius; + final BorderRadius? headerBorderRadius; const DatePickerTheme({ this.cancelStyle = const TextStyle(color: Colors.black54, fontSize: 16), @@ -25,6 +26,7 @@ class DatePickerTheme with DiagnosticableTreeMixin { this.containerHeight = 210.0, this.titleHeight = 44.0, this.itemHeight = 36.0, - this.borderRadius, + this.pickerBorderRadius, + this.headerBorderRadius, }); } From 41184cec2529e093541e135bec02ccf84ae51418 Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 11:41:22 +0100 Subject: [PATCH 5/7] Add support to border radius when showTitleActions is false --- lib/flutter_datetime_picker.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index 12d80744..c3a3e8a2 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -404,7 +404,10 @@ class _DatePickerState extends State<_DatePickerComponent> { Widget _renderItemView(DatePickerTheme theme) { return Container( - color: theme.backgroundColor, + decoration: BoxDecoration( + color: theme.backgroundColor, + borderRadius: theme.pickerBorderRadius, + ), child: Directionality( textDirection: TextDirection.ltr, child: Row( From 60ba887b9890cb3d69caae6d9e41a2d34070c6f7 Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 12:01:26 +0100 Subject: [PATCH 6/7] Fix border radius for the showTitleActions: false edge-case --- lib/flutter_datetime_picker.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index c3a3e8a2..7cdc74ef 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -403,11 +403,10 @@ class _DatePickerState extends State<_DatePickerComponent> { } Widget _renderItemView(DatePickerTheme theme) { - return Container( - decoration: BoxDecoration( + return ClipRRect( + borderRadius: theme.pickerBorderRadius, + child: Container( color: theme.backgroundColor, - borderRadius: theme.pickerBorderRadius, - ), child: Directionality( textDirection: TextDirection.ltr, child: Row( From fdbfc91d704dc2b929a8819965546b78e6eb59d6 Mon Sep 17 00:00:00 2001 From: Pedro Belfort Date: Wed, 24 Nov 2021 12:02:08 +0100 Subject: [PATCH 7/7] Fix format --- lib/flutter_datetime_picker.dart | 135 ++++++++++++++++--------------- 1 file changed, 68 insertions(+), 67 deletions(-) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index 7cdc74ef..f8e89cb6 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -403,76 +403,77 @@ class _DatePickerState extends State<_DatePickerComponent> { } Widget _renderItemView(DatePickerTheme theme) { - return ClipRRect( + return ClipRRect( borderRadius: theme.pickerBorderRadius, child: Container( color: theme.backgroundColor, - child: Directionality( - textDirection: TextDirection.ltr, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: widget.pickerModel.layoutProportions()[0] > 0 - ? _renderColumnView( - ValueKey(widget.pickerModel.currentLeftIndex()), - theme, - widget.pickerModel.leftStringAtIndex, - leftScrollCtrl, - widget.pickerModel.layoutProportions()[0], (index) { - widget.pickerModel.setLeftIndex(index); - }, (index) { - setState(() { - refreshScrollOffset(); - _notifyDateChanged(); - }); - }) - : null, - ), - Text( - widget.pickerModel.leftDivider(), - style: theme.itemStyle, - ), - Container( - child: widget.pickerModel.layoutProportions()[1] > 0 - ? _renderColumnView( - ValueKey(widget.pickerModel.currentLeftIndex()), - theme, - widget.pickerModel.middleStringAtIndex, - middleScrollCtrl, - widget.pickerModel.layoutProportions()[1], (index) { - widget.pickerModel.setMiddleIndex(index); - }, (index) { - setState(() { - refreshScrollOffset(); - _notifyDateChanged(); - }); - }) - : null, - ), - Text( - widget.pickerModel.rightDivider(), - style: theme.itemStyle, - ), - Container( - child: widget.pickerModel.layoutProportions()[2] > 0 - ? _renderColumnView( - ValueKey(widget.pickerModel.currentMiddleIndex() * 100 + - widget.pickerModel.currentLeftIndex()), - theme, - widget.pickerModel.rightStringAtIndex, - rightScrollCtrl, - widget.pickerModel.layoutProportions()[2], (index) { - widget.pickerModel.setRightIndex(index); - }, (index) { - setState(() { - refreshScrollOffset(); - _notifyDateChanged(); - }); - }) - : null, - ), - ], + child: Directionality( + textDirection: TextDirection.ltr, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: widget.pickerModel.layoutProportions()[0] > 0 + ? _renderColumnView( + ValueKey(widget.pickerModel.currentLeftIndex()), + theme, + widget.pickerModel.leftStringAtIndex, + leftScrollCtrl, + widget.pickerModel.layoutProportions()[0], (index) { + widget.pickerModel.setLeftIndex(index); + }, (index) { + setState(() { + refreshScrollOffset(); + _notifyDateChanged(); + }); + }) + : null, + ), + Text( + widget.pickerModel.leftDivider(), + style: theme.itemStyle, + ), + Container( + child: widget.pickerModel.layoutProportions()[1] > 0 + ? _renderColumnView( + ValueKey(widget.pickerModel.currentLeftIndex()), + theme, + widget.pickerModel.middleStringAtIndex, + middleScrollCtrl, + widget.pickerModel.layoutProportions()[1], (index) { + widget.pickerModel.setMiddleIndex(index); + }, (index) { + setState(() { + refreshScrollOffset(); + _notifyDateChanged(); + }); + }) + : null, + ), + Text( + widget.pickerModel.rightDivider(), + style: theme.itemStyle, + ), + Container( + child: widget.pickerModel.layoutProportions()[2] > 0 + ? _renderColumnView( + ValueKey(widget.pickerModel.currentMiddleIndex() * 100 + + widget.pickerModel.currentLeftIndex()), + theme, + widget.pickerModel.rightStringAtIndex, + rightScrollCtrl, + widget.pickerModel.layoutProportions()[2], (index) { + widget.pickerModel.setRightIndex(index); + }, (index) { + setState(() { + refreshScrollOffset(); + _notifyDateChanged(); + }); + }) + : null, + ), + ], + ), ), ), );