From 61e2b849fa8210398ff29df9483c88eeb375e9d8 Mon Sep 17 00:00:00 2001 From: Jacques Date: Mon, 6 Nov 2023 13:57:35 +0100 Subject: [PATCH 1/4] feat: Controller now has to be provided as parameter so the selected date can be changed from outside the widget. --- CHANGELOG.md | 4 + example/lib/main.dart | 46 ++++++------ example/pubspec.lock | 2 +- lib/flutter_date_time_picker.dart | 1 + lib/src/drag_down_date_time_picker.dart | 75 +++---------------- lib/src/overlay_date_time_picker.dart | 3 +- .../utils/date_time_picker_controller.dart | 44 +++++++++-- .../date_time_picker/date_time_picker.dart | 4 +- .../overlay_date_time_picker/date_picker.dart | 1 - .../week_date_time_picker.dart | 1 - pubspec.yaml | 2 +- test/flutter_date_time_picker_test.dart | 14 +++- 12 files changed, 95 insertions(+), 102 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e99681..3007741 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.0.0 + +- Controller has to be specified given to the [DragDownDateTimePicker] so the date can be changed outside of the widget itself. + ## 3.3.3 - Added option for date box theme for marked dates and a boolean to use it diff --git a/example/lib/main.dart b/example/lib/main.dart index 87251be..2808be4 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -156,32 +156,36 @@ class DatePickerDemo extends StatelessWidget { ), DragDownDateTimePicker( onTimerPickerSheetChange: (value) {}, - alwaysUse24HourFormat: true, - dateTimePickerTheme: const DateTimePickerTheme( - backgroundColor: Colors.white, - markedIndicatorColor: Colors.red, - baseTheme: DateBoxTheme( + controller: DateTimePickerController( + initialDate: DateTime.now(), + highlightToday: true, + alwaysUse24HourFormat: true, + markedDates: [DateTime.now().subtract(const Duration(days: 1))], + theme: const DateTimePickerTheme( backgroundColor: Colors.white, - textStyle: TextStyle(color: Colors.black), - ), - selectedTheme: DateBoxTheme( - backgroundColor: Color(0x4BF44336), - textStyle: TextStyle( - color: Colors.red, + markedIndicatorColor: Colors.red, + baseTheme: DateBoxTheme( + backgroundColor: Colors.white, + textStyle: TextStyle(color: Colors.black), ), - ), - highlightTheme: DateBoxTheme( - backgroundColor: Colors.red, - textStyle: TextStyle( - color: Colors.white, + selectedTheme: DateBoxTheme( + backgroundColor: Color(0x4BF44336), + textStyle: TextStyle( + color: Colors.red, + ), + ), + highlightTheme: DateBoxTheme( + backgroundColor: Colors.red, + textStyle: TextStyle( + color: Colors.white, + ), + ), + barTheme: DateTimePickerBarTheme( + barColor: Colors.black, + barOpacity: 1, ), - ), - barTheme: DateTimePickerBarTheme( - barColor: Colors.black, - barOpacity: 1, ), ), - markedDates: [DateTime.now().subtract(const Duration(days: 1))], ), ], ), diff --git a/example/pubspec.lock b/example/pubspec.lock index d09e770..633a761 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -68,7 +68,7 @@ packages: path: ".." relative: true source: path - version: "3.3.2" + version: "3.3.3" flutter_lints: dependency: "direct dev" description: diff --git a/lib/flutter_date_time_picker.dart b/lib/flutter_date_time_picker.dart index 576c90f..4b439f5 100644 --- a/lib/flutter_date_time_picker.dart +++ b/lib/flutter_date_time_picker.dart @@ -5,6 +5,7 @@ library flutter_date_time_picker; export 'src/drag_down_date_time_picker.dart' show DragDownDateTimePicker; +export 'src/utils/date_time_picker_controller.dart'; export 'src/overlay_date_time_picker.dart' show OverlayDateTimePicker; export 'src/models/date_constraint.dart'; export 'src/enums/date_box_shape.dart'; diff --git a/lib/src/drag_down_date_time_picker.dart b/lib/src/drag_down_date_time_picker.dart index 4b74782..1d5caae 100644 --- a/lib/src/drag_down_date_time_picker.dart +++ b/lib/src/drag_down_date_time_picker.dart @@ -3,7 +3,7 @@ // SPDX-License-Identifier: BSD-3-Clause import 'package:flutter/material.dart'; -import 'package:flutter_date_time_picker/src/models/date_time_picker_theme.dart'; + import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/month_date_time_picker/month_date_time_picker_sheet.dart'; import 'package:flutter_date_time_picker/src/widgets/week_date_time_picker/week_date_time_picker_sheet.dart'; @@ -15,59 +15,21 @@ class DragDownDateTimePicker extends StatefulWidget { /// Both views can be dragged sideways to show the next or previous week/month. const DragDownDateTimePicker({ - this.dateTimePickerTheme = const DateTimePickerTheme(), - this.header, + required this.controller, this.onTimerPickerSheetChange, - this.onTapDay, - this.highlightToday = true, this.wrongTimeDialog, - this.alwaysUse24HourFormat, - this.pickTime = false, - this.initialDate, - this.markedDates, - this.disabledDates, - this.disabledTimes, this.child, super.key, }); + final DateTimePickerController controller; + /// The child contained by the DatePicker. final Widget? child; /// A [Widget] to display when the user picks a disabled time in the [TimePickerDialog] final Widget? wrongTimeDialog; - /// Visual properties for the [DragDownDateTimePicker] - final DateTimePickerTheme dateTimePickerTheme; - - /// Widget shown at the top of the [DragDownDateTimePicker] - final Widget? header; - - /// Callback that provides the date tapped on as a [DateTime] object. - final Function(DateTime)? onTapDay; - - /// Whether the current day should be highlighted in the [DragDownDateTimePicker] - final bool highlightToday; - - /// a [bool] to set de clock on [TimePickerDialog] to a fixed 24 or 12-hour format. - /// By default this gets determined by the settings on the user device. - final bool? alwaysUse24HourFormat; - - /// [pickTime] is a [bool] that determines if the user is able to pick a time after picking a date using the [TimePickerDialog]. - final bool pickTime; - - /// indicates the starting date. Default is [DateTime.now()] - final DateTime? initialDate; - - /// [markedDates] contain the dates [DateTime] that will be marked in the [DragDownDateTimePicker] by a small dot. - final List? markedDates; - - /// a [List] of [DateTime] objects that will be disabled and cannot be interacted with whatsoever. - final List? disabledDates; - - /// a [List] of [TimeOfDay] objects that cannot be picked in the [TimePickerDialog]. - final List? disabledTimes; - /// Function that gets called when the view changes from week to month or vice versa. /// The value is the amount of scrolledpixels. final Function(double)? onTimerPickerSheetChange; @@ -77,7 +39,8 @@ class DragDownDateTimePicker extends StatefulWidget { } class _DragDownDateTimePickerState extends State { - late DateTimePickerController _dateTimePickerController; + late final DateTimePickerController _dateTimePickerController = + widget.controller; final DraggableScrollableController _dragController = DraggableScrollableController(); @@ -87,20 +50,6 @@ class _DragDownDateTimePickerState extends State { super.initState(); initializeDateFormatting(); - _dateTimePickerController = DateTimePickerController( - highlightToday: widget.highlightToday, - alwaysUse24HourFormat: widget.alwaysUse24HourFormat, - pickTime: widget.pickTime, - theme: widget.dateTimePickerTheme, - header: widget.header, - markedDates: widget.markedDates, - disabledDates: widget.disabledDates, - disabledTimes: widget.disabledTimes, - onTapDayCallBack: widget.onTapDay, - browsingDate: widget.initialDate ?? DateTime.now(), - selectedDate: widget.initialDate ?? DateTime.now(), - ); - _dateTimePickerController.addListener(() { setState(() {}); }); @@ -166,16 +115,16 @@ class _DragDownDateTimePickerState extends State { ? WeekDateTimePickerSheet( dateTimePickerController: _dateTimePickerController, - weekDateBoxSize: widget - .dateTimePickerTheme.weekDateBoxSize, + weekDateBoxSize: + widget.controller.theme.weekDateBoxSize, ) : MonthDateTimePickerSheet( dateTimePickerController: _dateTimePickerController, - monthDateBoxSize: widget - .dateTimePickerTheme.monthDateBoxSize, - monthDatePadding: widget - .dateTimePickerTheme.monthDatePadding, + monthDateBoxSize: + widget.controller.theme.monthDateBoxSize, + monthDatePadding: + widget.controller.theme.monthDatePadding, ), ), ), diff --git a/lib/src/overlay_date_time_picker.dart b/lib/src/overlay_date_time_picker.dart index a8c5f39..c644b96 100644 --- a/lib/src/overlay_date_time_picker.dart +++ b/lib/src/overlay_date_time_picker.dart @@ -127,8 +127,7 @@ class _OverlayDateTimePickerState extends State { Navigator.of(context).pop(); } }, - browsingDate: widget.initialDate ?? DateTime.now(), - selectedDate: widget.initialDate ?? DateTime.now(), + initialDate: widget.initialDate ?? DateTime.now(), ); } diff --git a/lib/src/utils/date_time_picker_controller.dart b/lib/src/utils/date_time_picker_controller.dart index 7b72994..d8e18de 100644 --- a/lib/src/utils/date_time_picker_controller.dart +++ b/lib/src/utils/date_time_picker_controller.dart @@ -9,9 +9,8 @@ class DateTimePickerController extends ChangeNotifier { DateTimePickerController({ required this.theme, required this.highlightToday, - required this.pickTime, - required this.browsingDate, - required this.selectedDate, + required this.initialDate, + this.pickTime = false, this.alwaysUse24HourFormat, this.header, this.wrongTimeDialog, @@ -19,28 +18,48 @@ class DateTimePickerController extends ChangeNotifier { this.disabledDates, this.disabledTimes, this.onTapDayCallBack, + this.onBorderScrollCallback, }); - final PageController _pageController = PageController(initialPage: 1); - + /// Whether the current day should be highlighted in the [DragDownDateTimePicker] final bool highlightToday; + + /// a [bool] to set de clock on [TimePickerDialog] to a fixed 24 or 12-hour format. + /// By default this gets determined by the settings on the user device. final bool? alwaysUse24HourFormat; + /// Widget shown at the top of the [DragDownDateTimePicker] final Widget? header; final Widget? wrongTimeDialog; + /// Visual properties for the [DragDownDateTimePicker] final DateTimePickerTheme theme; + /// [markedDates] contain the dates [DateTime] that will be marked in the [DragDownDateTimePicker] by a small dot. final List? markedDates; + + /// a [List] of [DateTime] objects that will be disabled and cannot be interacted with whatsoever. final List? disabledDates; + + /// a [List] of [TimeOfDay] objects that cannot be picked in the [TimePickerDialog]. final List? disabledTimes; + + /// [pickTime] is a [bool] that determines if the user is able to pick a time after picking a date using the [TimePickerDialog]. final bool pickTime; + /// Callback that provides the date tapped on as a [DateTime] object. final Function(DateTime)? onTapDayCallBack; - DateTime browsingDate; - DateTime selectedDate; + /// Callback that provides the new date which is scroll to. If this is null the scroll feature is disabled. + final Function(DateTime)? onBorderScrollCallback; + + final DateTime initialDate; + + final PageController _pageController = PageController(initialPage: 1); + + late DateTime browsingDate = initialDate; + late DateTime selectedDate = initialDate; @override void dispose() { @@ -74,6 +93,17 @@ class DateTimePickerController extends ChangeNotifier { } } + void onBorderScroll(DateTime date) { + browsingDate = date; + selectedDate = date; + + notifyListeners(); + + onBorderScrollCallback?.call( + date, + ); + } + PageController get pageController => _pageController; void setBrowsingDate(DateTime date) { diff --git a/lib/src/widgets/date_time_picker/date_time_picker.dart b/lib/src/widgets/date_time_picker/date_time_picker.dart index 656df6c..5342ae7 100644 --- a/lib/src/widgets/date_time_picker/date_time_picker.dart +++ b/lib/src/widgets/date_time_picker/date_time_picker.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart'; class DateTimePicker extends StatefulWidget { @@ -105,8 +104,7 @@ class _DateTimePickerState extends State { Navigator.of(context).pop(); } }, - browsingDate: widget.initialDate ?? DateTime.now(), - selectedDate: widget.initialDate ?? DateTime.now(), + initialDate: widget.initialDate ?? DateTime.now(), ); @override Widget build(BuildContext context) { diff --git a/lib/src/widgets/overlay_date_time_picker/date_picker.dart b/lib/src/widgets/overlay_date_time_picker/date_picker.dart index d020819..0303feb 100644 --- a/lib/src/widgets/overlay_date_time_picker/date_picker.dart +++ b/lib/src/widgets/overlay_date_time_picker/date_picker.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/pickable_date.dart'; import 'package:intl/intl.dart'; diff --git a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart index c3a253b..dc421eb 100644 --- a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart +++ b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart @@ -7,7 +7,6 @@ import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; import 'package:flutter_date_time_picker/src/extensions/time_of_day.dart'; import 'package:flutter_date_time_picker/src/models/date_box_current_theme.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/marked_icon.dart'; import 'package:intl/intl.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 7325b57..addf7c5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_date_time_picker description: A Flutter package for date and time picker. -version: 3.3.3 +version: 4.0.0 environment: sdk: ">=3.0.0 <4.0.0" diff --git a/test/flutter_date_time_picker_test.dart b/test/flutter_date_time_picker_test.dart index 8b9ef20..367dacf 100644 --- a/test/flutter_date_time_picker_test.dart +++ b/test/flutter_date_time_picker_test.dart @@ -13,7 +13,12 @@ void main() { home: Scaffold( appBar: AppBar(), body: DragDownDateTimePicker( - pickTime: false, + controller: DateTimePickerController( + theme: const DateTimePickerTheme(), + highlightToday: true, + initialDate: DateTime.now(), + pickTime: false, + ), child: Container(), ), ), @@ -27,7 +32,12 @@ void main() { home: Scaffold( appBar: AppBar(), body: DragDownDateTimePicker( - pickTime: false, + controller: DateTimePickerController( + theme: const DateTimePickerTheme(), + highlightToday: true, + initialDate: DateTime.now(), + pickTime: false, + ), child: Container(), ), ), From 5f24c04248b2be856025fd16f49e80e573bb3a5b Mon Sep 17 00:00:00 2001 From: Jacques Date: Tue, 7 Nov 2023 09:28:44 +0100 Subject: [PATCH 2/4] fix: Split the controller into a configration and controller. --- example/.metadata | 29 ++++++++--- example/lib/main.dart | 2 + example/pubspec.lock | 2 +- lib/flutter_date_time_picker.dart | 1 + lib/src/drag_down_date_time_picker.dart | 32 +++++++----- lib/src/overlay_date_time_picker.dart | 18 ++++--- lib/src/utils/date_time_picker_config.dart | 47 ++++++++++++++++++ .../utils/date_time_picker_controller.dart | 37 -------------- .../date_time_picker/date_time_picker.dart | 19 ++++--- .../month_date_time_picker.dart | 49 +++++++++++-------- .../month_date_time_picker_sheet.dart | 27 ++++++---- .../overlay_date_time_picker/date_picker.dart | 9 ++-- .../overlay_date_time_picker/overlay.dart | 6 +++ .../week_date_time_picker.dart | 33 +++++++------ .../week_date_time_picker_sheet.dart | 12 +++-- test/flutter_date_time_picker_test.dart | 9 +++- 16 files changed, 206 insertions(+), 126 deletions(-) create mode 100644 lib/src/utils/date_time_picker_config.dart diff --git a/example/.metadata b/example/.metadata index aa9aff4..acfc1cf 100644 --- a/example/.metadata +++ b/example/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 - channel: stable + revision: "6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e" + channel: "stable" project_type: app @@ -13,11 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 - base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + - platform: android + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + - platform: ios + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + - platform: linux + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + - platform: macos + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e - platform: web - create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 - base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + - platform: windows + create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e + base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e # User provided section diff --git a/example/lib/main.dart b/example/lib/main.dart index 2808be4..c739e80 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -158,6 +158,8 @@ class DatePickerDemo extends StatelessWidget { onTimerPickerSheetChange: (value) {}, controller: DateTimePickerController( initialDate: DateTime.now(), + ), + configuration: DateTimePickerConfiguration( highlightToday: true, alwaysUse24HourFormat: true, markedDates: [DateTime.now().subtract(const Duration(days: 1))], diff --git a/example/pubspec.lock b/example/pubspec.lock index 633a761..c39c586 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -68,7 +68,7 @@ packages: path: ".." relative: true source: path - version: "3.3.3" + version: "4.0.0" flutter_lints: dependency: "direct dev" description: diff --git a/lib/flutter_date_time_picker.dart b/lib/flutter_date_time_picker.dart index 4b439f5..1b7afc5 100644 --- a/lib/flutter_date_time_picker.dart +++ b/lib/flutter_date_time_picker.dart @@ -6,6 +6,7 @@ library flutter_date_time_picker; export 'src/drag_down_date_time_picker.dart' show DragDownDateTimePicker; export 'src/utils/date_time_picker_controller.dart'; +export 'src/utils/date_time_picker_config.dart'; export 'src/overlay_date_time_picker.dart' show OverlayDateTimePicker; export 'src/models/date_constraint.dart'; export 'src/enums/date_box_shape.dart'; diff --git a/lib/src/drag_down_date_time_picker.dart b/lib/src/drag_down_date_time_picker.dart index 1d5caae..8eb2dea 100644 --- a/lib/src/drag_down_date_time_picker.dart +++ b/lib/src/drag_down_date_time_picker.dart @@ -3,6 +3,7 @@ // SPDX-License-Identifier: BSD-3-Clause import 'package:flutter/material.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/month_date_time_picker/month_date_time_picker_sheet.dart'; @@ -16,6 +17,7 @@ class DragDownDateTimePicker extends StatefulWidget { const DragDownDateTimePicker({ required this.controller, + required this.configuration, this.onTimerPickerSheetChange, this.wrongTimeDialog, this.child, @@ -23,6 +25,7 @@ class DragDownDateTimePicker extends StatefulWidget { }); final DateTimePickerController controller; + final DateTimePickerConfiguration configuration; /// The child contained by the DatePicker. final Widget? child; @@ -78,9 +81,9 @@ class _DragDownDateTimePickerState extends State { child: DraggableScrollableSheet( controller: _dragController, snap: true, - minChildSize: _dateTimePickerController.theme.weekViewSize, - initialChildSize: _dateTimePickerController.theme.weekViewSize, - maxChildSize: _dateTimePickerController.theme.monthViewSize, + minChildSize: widget.configuration.theme.weekViewSize, + initialChildSize: widget.configuration.theme.weekViewSize, + maxChildSize: widget.configuration.theme.monthViewSize, builder: (context, scrollController) { double dragSize = _dragController.isAttached ? _dragController.size : 0; @@ -96,8 +99,7 @@ class _DragDownDateTimePickerState extends State { padding: const EdgeInsets.only(bottom: 12.5), child: Container( decoration: BoxDecoration( - color: - _dateTimePickerController.theme.backgroundColor, + color: widget.configuration.theme.backgroundColor, borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20), @@ -110,21 +112,25 @@ class _DragDownDateTimePickerState extends State { ], ), child: dragSize < - _dateTimePickerController - .theme.weekMonthTriggerSize + widget + .configuration.theme.weekMonthTriggerSize ? WeekDateTimePickerSheet( dateTimePickerController: _dateTimePickerController, - weekDateBoxSize: - widget.controller.theme.weekDateBoxSize, + dateTimePickerConfiguration: + widget.configuration, + weekDateBoxSize: widget + .configuration.theme.weekDateBoxSize, ) : MonthDateTimePickerSheet( dateTimePickerController: _dateTimePickerController, - monthDateBoxSize: - widget.controller.theme.monthDateBoxSize, - monthDatePadding: - widget.controller.theme.monthDatePadding, + dateTimePickerConfiguration: + widget.configuration, + monthDateBoxSize: widget + .configuration.theme.monthDateBoxSize, + monthDatePadding: widget + .configuration.theme.monthDatePadding, ), ), ), diff --git a/lib/src/overlay_date_time_picker.dart b/lib/src/overlay_date_time_picker.dart index c644b96..302fee6 100644 --- a/lib/src/overlay_date_time_picker.dart +++ b/lib/src/overlay_date_time_picker.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/src/models/date_time_picker_theme.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/models/date_constraint.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart'; @@ -106,6 +107,15 @@ class _OverlayDateTimePickerState extends State { late bool _isShown = widget.isShown; late final DateTimePickerController _dateTimePickerController; + late final _dateTimePickerConfiguration = DateTimePickerConfiguration( + highlightToday: widget.highlightToday, + alwaysUse24HourFormat: widget.alwaysUse24HourFormat, + pickTime: widget.pickTime, + theme: widget.theme, + markedDates: widget.markedDates, + disabledDates: widget.disabledDates, + disabledTimes: widget.disabledTimes, + ); _DropdownRoute? _dropdownRoute; @@ -114,13 +124,6 @@ class _OverlayDateTimePickerState extends State { super.initState(); initializeDateFormatting(); _dateTimePickerController = DateTimePickerController( - highlightToday: widget.highlightToday, - alwaysUse24HourFormat: widget.alwaysUse24HourFormat, - pickTime: widget.pickTime, - theme: widget.theme, - markedDates: widget.markedDates, - disabledDates: widget.disabledDates, - disabledTimes: widget.disabledTimes, onTapDayCallBack: (date) { widget.onTapDay?.call(date); if (widget.closeOnSelectDate) { @@ -231,6 +234,7 @@ class _OverlayDateTimePickerState extends State { weekdayTextStyle: widget.textStyle, size: widget.size, controller: _dateTimePickerController, + configuration: _dateTimePickerConfiguration, showWeekDays: true, onNextDate: nextDate, onPreviousDate: previousDate, diff --git a/lib/src/utils/date_time_picker_config.dart b/lib/src/utils/date_time_picker_config.dart new file mode 100644 index 0000000..0866b38 --- /dev/null +++ b/lib/src/utils/date_time_picker_config.dart @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: 2023 Iconica +// +// SPDX-License-Identifier: BSD-3-Clause + +import 'package:flutter/material.dart'; +import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; + +class DateTimePickerConfiguration { + DateTimePickerConfiguration({ + required this.theme, + this.pickTime = false, + this.highlightToday = true, + this.alwaysUse24HourFormat, + this.header, + this.wrongTimeDialog, + this.markedDates, + this.disabledDates, + this.disabledTimes, + }); + + /// Whether the current day should be highlighted in the [DragDownDateTimePicker] + final bool highlightToday; + + /// a [bool] to set de clock on [TimePickerDialog] to a fixed 24 or 12-hour format. + /// By default this gets determined by the settings on the user device. + final bool? alwaysUse24HourFormat; + + /// Widget shown at the top of the [DragDownDateTimePicker] + final Widget? header; + + final Widget? wrongTimeDialog; + + /// Visual properties for the [DragDownDateTimePicker] + final DateTimePickerTheme theme; + + /// [markedDates] contain the dates [DateTime] that will be marked in the [DragDownDateTimePicker] by a small dot. + final List? markedDates; + + /// a [List] of [DateTime] objects that will be disabled and cannot be interacted with whatsoever. + final List? disabledDates; + + /// a [List] of [TimeOfDay] objects that cannot be picked in the [TimePickerDialog]. + final List? disabledTimes; + + /// [pickTime] is a [bool] that determines if the user is able to pick a time after picking a date using the [TimePickerDialog]. + final bool pickTime; +} diff --git a/lib/src/utils/date_time_picker_controller.dart b/lib/src/utils/date_time_picker_controller.dart index d8e18de..0bd3055 100644 --- a/lib/src/utils/date_time_picker_controller.dart +++ b/lib/src/utils/date_time_picker_controller.dart @@ -3,51 +3,14 @@ // SPDX-License-Identifier: BSD-3-Clause import 'package:flutter/material.dart'; -import 'package:flutter_date_time_picker/src/models/date_time_picker_theme.dart'; class DateTimePickerController extends ChangeNotifier { DateTimePickerController({ - required this.theme, - required this.highlightToday, required this.initialDate, - this.pickTime = false, - this.alwaysUse24HourFormat, - this.header, - this.wrongTimeDialog, - this.markedDates, - this.disabledDates, - this.disabledTimes, this.onTapDayCallBack, this.onBorderScrollCallback, }); - /// Whether the current day should be highlighted in the [DragDownDateTimePicker] - final bool highlightToday; - - /// a [bool] to set de clock on [TimePickerDialog] to a fixed 24 or 12-hour format. - /// By default this gets determined by the settings on the user device. - final bool? alwaysUse24HourFormat; - - /// Widget shown at the top of the [DragDownDateTimePicker] - final Widget? header; - - final Widget? wrongTimeDialog; - - /// Visual properties for the [DragDownDateTimePicker] - final DateTimePickerTheme theme; - - /// [markedDates] contain the dates [DateTime] that will be marked in the [DragDownDateTimePicker] by a small dot. - final List? markedDates; - - /// a [List] of [DateTime] objects that will be disabled and cannot be interacted with whatsoever. - final List? disabledDates; - - /// a [List] of [TimeOfDay] objects that cannot be picked in the [TimePickerDialog]. - final List? disabledTimes; - - /// [pickTime] is a [bool] that determines if the user is able to pick a time after picking a date using the [TimePickerDialog]. - final bool pickTime; - /// Callback that provides the date tapped on as a [DateTime] object. final Function(DateTime)? onTapDayCallBack; diff --git a/lib/src/widgets/date_time_picker/date_time_picker.dart b/lib/src/widgets/date_time_picker/date_time_picker.dart index 5342ae7..d44f6e5 100644 --- a/lib/src/widgets/date_time_picker/date_time_picker.dart +++ b/lib/src/widgets/date_time_picker/date_time_picker.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart'; class DateTimePicker extends StatefulWidget { @@ -91,13 +92,6 @@ class DateTimePicker extends StatefulWidget { class _DateTimePickerState extends State { late final DateTimePickerController _dateTimePickerController = DateTimePickerController( - highlightToday: widget.highlightToday, - alwaysUse24HourFormat: widget.alwaysUse24HourFormat, - pickTime: widget.pickTime, - theme: widget.theme, - markedDates: widget.markedDates, - disabledDates: widget.disabledDates, - disabledTimes: widget.disabledTimes, onTapDayCallBack: (date) { widget.onTapDay?.call(date); if (widget.closeOnSelectDate) { @@ -106,6 +100,16 @@ class _DateTimePickerState extends State { }, initialDate: widget.initialDate ?? DateTime.now(), ); + late final _dateTimePickerConfiguration = DateTimePickerConfiguration( + highlightToday: widget.highlightToday, + alwaysUse24HourFormat: widget.alwaysUse24HourFormat, + pickTime: widget.pickTime, + theme: widget.theme, + markedDates: widget.markedDates, + disabledDates: widget.disabledDates, + disabledTimes: widget.disabledTimes, + ); + @override Widget build(BuildContext context) { var size = MediaQuery.of(context).size; @@ -147,6 +151,7 @@ class _DateTimePickerState extends State { weekdayTextStyle: widget.weekdayTextStyle, size: widget.size ?? Size(size.width, size.height), controller: _dateTimePickerController, + configuration: _dateTimePickerConfiguration, showWeekDays: true, onNextDate: nextDate, onPreviousDate: previousDate, diff --git a/lib/src/widgets/month_date_time_picker/month_date_time_picker.dart b/lib/src/widgets/month_date_time_picker/month_date_time_picker.dart index 8b36da7..c7f5698 100644 --- a/lib/src/widgets/month_date_time_picker/month_date_time_picker.dart +++ b/lib/src/widgets/month_date_time_picker/month_date_time_picker.dart @@ -8,6 +8,7 @@ import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; import 'package:flutter_date_time_picker/src/extensions/time_of_day.dart'; import 'package:flutter_date_time_picker/src/models/date_box_current_theme.dart'; import 'package:flutter_date_time_picker/src/models/date_time_picker_theme.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/marked_icon.dart'; import 'package:intl/intl.dart'; @@ -17,11 +18,13 @@ class MonthDateTimePicker extends StatelessWidget { required this.date, required this.dateTimePickerController, required this.monthDateBoxSize, + required this.dateTimePickerConfiguration, Key? key, }) : super(key: key); final DateTime date; final DateTimePickerController dateTimePickerController; + final DateTimePickerConfiguration dateTimePickerConfiguration; final double monthDateBoxSize; @override @@ -39,7 +42,7 @@ class MonthDateTimePicker extends StatelessWidget { child: Center( child: Column( children: [ - if (dateTimePickerController.theme.monthWeekDayHeaders) + if (dateTimePickerConfiguration.theme.monthWeekDayHeaders) Row( children: List.generate( 7, @@ -51,8 +54,8 @@ class MonthDateTimePicker extends StatelessWidget { date.daysOfWeek().elementAt(index), ) .toUpperCase()[0], - style: - dateTimePickerController.theme.baseTheme.textStyle, + style: dateTimePickerConfiguration + .theme.baseTheme.textStyle, ), ), ), @@ -79,8 +82,11 @@ class MonthDateTimePicker extends StatelessWidget { return const SizedBox.shrink(); } - currentDateBoxTheme = determineCurrentDateBoxTheme(context, - addedIndex, daysToSkip, dateTimePickerController.theme); + currentDateBoxTheme = determineCurrentDateBoxTheme( + context, + addedIndex, + daysToSkip, + dateTimePickerConfiguration.theme); return GestureDetector( onTap: isDisabled( @@ -99,23 +105,24 @@ class MonthDateTimePicker extends StatelessWidget { timeOfDay = const TimeOfDay(hour: 0, minute: 0); - if (dateTimePickerController.pickTime) { + if (dateTimePickerConfiguration.pickTime) { timeOfDay = await displayTimePicker( - context, dateTimePickerController); + context, dateTimePickerConfiguration); } - if (dateTimePickerController.wrongTimeDialog != + if (dateTimePickerConfiguration.wrongTimeDialog != null) { if (timeOfDay != null && timeOfDay.containsAny( - dateTimePickerController.disabledTimes ?? + dateTimePickerConfiguration + .disabledTimes ?? [], )) { if (context.mounted) { showDialog( context: context, builder: (context) => - dateTimePickerController + dateTimePickerConfiguration .wrongTimeDialog!, ); } @@ -138,8 +145,8 @@ class MonthDateTimePicker extends StatelessWidget { vertical: 5, horizontal: 5), decoration: BoxDecoration( color: currentDateBoxTheme.backgroundColor, - borderRadius: - _determineBorderRadius(dateTimePickerController), + borderRadius: _determineBorderRadius( + dateTimePickerConfiguration), ), height: monthDateBoxSize, width: monthDateBoxSize, @@ -157,7 +164,7 @@ class MonthDateTimePicker extends StatelessWidget { MarkedIcon( width: monthDateBoxSize / 4, height: monthDateBoxSize / 4, - color: dateTimePickerController + color: dateTimePickerConfiguration .theme.markedIndicatorColor, ), ], @@ -181,7 +188,7 @@ class MonthDateTimePicker extends StatelessWidget { date.month, index + 1 - daysToSkip, ).equals( - dateTimePickerController.highlightToday + dateTimePickerConfiguration.highlightToday ? DateTime.now() : dateTimePickerController.selectedDate, ); @@ -228,7 +235,7 @@ class MonthDateTimePicker extends StatelessWidget { date.month, index + 1 - daysToSkip, ).containsAny( - dateTimePickerController.disabledDates ?? [], + dateTimePickerConfiguration.disabledDates ?? [], ); } @@ -246,7 +253,7 @@ class MonthDateTimePicker extends StatelessWidget { date.month, index + 1 - daysToSkip, ).equals( - dateTimePickerController.highlightToday + dateTimePickerConfiguration.highlightToday ? DateTime.now() : dateTimePickerController.selectedDate, ) && @@ -255,13 +262,13 @@ class MonthDateTimePicker extends StatelessWidget { date.month, index + 1 - daysToSkip, ).containsAny( - dateTimePickerController.markedDates ?? [], + dateTimePickerConfiguration.markedDates ?? [], ); } BorderRadius _determineBorderRadius( - DateTimePickerController dateTimePickerController) { - switch (dateTimePickerController.theme.dateBoxShape) { + DateTimePickerConfiguration dateTimePickerConfiguration) { + switch (dateTimePickerConfiguration.theme.dateBoxShape) { case DateBoxShape.circle: return BorderRadius.circular(monthDateBoxSize * 2); case DateBoxShape.rectangle: @@ -273,7 +280,7 @@ class MonthDateTimePicker extends StatelessWidget { } displayTimePicker(BuildContext context, - DateTimePickerController dateTimePickerController) async { + DateTimePickerConfiguration dateTimePickerConfiguration) async { return await showTimePicker( context: context, initialTime: TimeOfDay.now(), @@ -281,7 +288,7 @@ displayTimePicker(BuildContext context, return MediaQuery( data: MediaQuery.of(context).copyWith( alwaysUse24HourFormat: - dateTimePickerController.alwaysUse24HourFormat), + dateTimePickerConfiguration.alwaysUse24HourFormat), child: child!, ); }); diff --git a/lib/src/widgets/month_date_time_picker/month_date_time_picker_sheet.dart b/lib/src/widgets/month_date_time_picker/month_date_time_picker_sheet.dart index 2ce3261..a0bca2b 100644 --- a/lib/src/widgets/month_date_time_picker/month_date_time_picker_sheet.dart +++ b/lib/src/widgets/month_date_time_picker/month_date_time_picker_sheet.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/month_date_time_picker/month_date_time_picker.dart'; import 'package:intl/intl.dart'; @@ -11,26 +12,28 @@ import 'package:intl/intl.dart'; class MonthDateTimePickerSheet extends StatelessWidget { const MonthDateTimePickerSheet({ required this.dateTimePickerController, + required this.dateTimePickerConfiguration, required this.monthDateBoxSize, required this.monthDatePadding, super.key, }); final DateTimePickerController dateTimePickerController; + final DateTimePickerConfiguration dateTimePickerConfiguration; final double monthDateBoxSize; final EdgeInsetsGeometry monthDatePadding; @override Widget build(BuildContext context) { - var theme = dateTimePickerController.theme; + var theme = dateTimePickerConfiguration.theme; var size = MediaQuery.of(context).size; return Column( children: [ - if (dateTimePickerController.header != null) ...[ + if (dateTimePickerConfiguration.header != null) ...[ Align( alignment: Alignment.topCenter, - child: dateTimePickerController.header!, + child: dateTimePickerConfiguration.header!, ), ], Padding( @@ -74,13 +77,15 @@ class MonthDateTimePickerSheet extends StatelessWidget { }, children: [ MonthDateTimePicker( - date: dateTimePickerController.browsingDate.month == 1 - ? DateTime( - dateTimePickerController.browsingDate.year - 1, 12, 1) - : DateTime(dateTimePickerController.browsingDate.year, - dateTimePickerController.browsingDate.month - 1, 1), - monthDateBoxSize: monthDateBoxSize, - dateTimePickerController: dateTimePickerController), + date: dateTimePickerController.browsingDate.month == 1 + ? DateTime( + dateTimePickerController.browsingDate.year - 1, 12, 1) + : DateTime(dateTimePickerController.browsingDate.year, + dateTimePickerController.browsingDate.month - 1, 1), + monthDateBoxSize: monthDateBoxSize, + dateTimePickerController: dateTimePickerController, + dateTimePickerConfiguration: dateTimePickerConfiguration, + ), MonthDateTimePicker( date: DateTime( dateTimePickerController.browsingDate.year, @@ -88,6 +93,7 @@ class MonthDateTimePickerSheet extends StatelessWidget { 1, ), dateTimePickerController: dateTimePickerController, + dateTimePickerConfiguration: dateTimePickerConfiguration, monthDateBoxSize: monthDateBoxSize), MonthDateTimePicker( date: dateTimePickerController.browsingDate.month == 12 @@ -99,6 +105,7 @@ class MonthDateTimePickerSheet extends StatelessWidget { : DateTime(dateTimePickerController.browsingDate.year, dateTimePickerController.browsingDate.month + 1, 1), dateTimePickerController: dateTimePickerController, + dateTimePickerConfiguration: dateTimePickerConfiguration, monthDateBoxSize: monthDateBoxSize), ], ), diff --git a/lib/src/widgets/overlay_date_time_picker/date_picker.dart b/lib/src/widgets/overlay_date_time_picker/date_picker.dart index 0303feb..510a02d 100644 --- a/lib/src/widgets/overlay_date_time_picker/date_picker.dart +++ b/lib/src/widgets/overlay_date_time_picker/date_picker.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/pickable_date.dart'; import 'package:intl/intl.dart'; @@ -12,6 +13,7 @@ class DatePicker extends StatelessWidget { const DatePicker({ super.key, required this.controller, + required this.configuration, required this.theme, required this.weekdayTextStyle, required this.onSelectDate, @@ -21,6 +23,7 @@ class DatePicker extends StatelessWidget { }); final DateTimePickerController controller; + final DateTimePickerConfiguration configuration; final DateTimePickerTheme theme; final TextStyle weekdayTextStyle; final void Function(DateTime date) onSelectDate; @@ -94,7 +97,7 @@ class DatePicker extends StatelessWidget { return Padding( padding: const EdgeInsets.all(2.0), child: PickableDate( - isMarked: controller.markedDates?.any( + isMarked: configuration.markedDates?.any( (e) => isSameDay(e, todayDate), ) ?? false, @@ -102,7 +105,7 @@ class DatePicker extends StatelessWidget { isDisabled: isDisabled(addedIndex + index, daysToSkip, todayDate), isSelected: controller.selectedDate == todayDate, - isToday: isToday(todayDate) && controller.highlightToday, + isToday: isToday(todayDate) && configuration.highlightToday, theme: theme, date: todayDate, onPressed: onSelectDate, @@ -130,7 +133,7 @@ class DatePicker extends StatelessWidget { date.month, index + 1 - daysToSkip, ).containsAny( - controller.disabledDates ?? [], + configuration.disabledDates ?? [], ) || !dateTimeConstraint.inRange(date); } diff --git a/lib/src/widgets/overlay_date_time_picker/overlay.dart b/lib/src/widgets/overlay_date_time_picker/overlay.dart index 5219824..ddcf972 100644 --- a/lib/src/widgets/overlay_date_time_picker/overlay.dart +++ b/lib/src/widgets/overlay_date_time_picker/overlay.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/src/models/date_time_picker_theme.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/utils/locking_page_scroll_physics.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/date_picker.dart'; @@ -17,6 +18,7 @@ class OverlayDateTimeContent extends StatefulWidget { required this.weekdayTextStyle, required this.size, required this.controller, + required this.configuration, required this.showWeekDays, required this.onNextDate, required this.onPreviousDate, @@ -29,6 +31,7 @@ class OverlayDateTimeContent extends StatefulWidget { final TextStyle weekdayTextStyle; final Size size; final DateTimePickerController controller; + final DateTimePickerConfiguration configuration; final bool showWeekDays; final DateTimeConstraint dateTimeConstraint; @@ -149,6 +152,7 @@ class _OverlayDateTimeContentState extends State { children: [ DatePicker( controller: widget.controller, + configuration: widget.configuration, onSelectDate: _onSelectDate, theme: widget.theme, weekdayTextStyle: widget.weekdayTextStyle, @@ -158,6 +162,7 @@ class _OverlayDateTimeContentState extends State { ), DatePicker( controller: widget.controller, + configuration: widget.configuration, onSelectDate: _onSelectDate, theme: widget.theme, weekdayTextStyle: widget.weekdayTextStyle, @@ -167,6 +172,7 @@ class _OverlayDateTimeContentState extends State { ), DatePicker( controller: widget.controller, + configuration: widget.configuration, onSelectDate: _onSelectDate, theme: widget.theme, weekdayTextStyle: widget.weekdayTextStyle, diff --git a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart index dc421eb..7230a12 100644 --- a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart +++ b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart @@ -7,18 +7,21 @@ import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; import 'package:flutter_date_time_picker/src/extensions/time_of_day.dart'; import 'package:flutter_date_time_picker/src/models/date_box_current_theme.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/widgets/marked_icon.dart'; import 'package:intl/intl.dart'; class WeekDateTimePicker extends StatelessWidget { const WeekDateTimePicker({ required this.dateTimePickerController, + required this.dateTimePickerConfiguration, required this.date, required this.weekDateBoxSize, Key? key, }) : super(key: key); final DateTimePickerController dateTimePickerController; + final DateTimePickerConfiguration dateTimePickerConfiguration; final DateTime date; @@ -34,7 +37,7 @@ class WeekDateTimePicker extends StatelessWidget { late DateBoxCurrentTheme currentDateBoxTheme; currentDateBoxTheme = determineCurrentDateBoxTheme( - context, index, dateTimePickerController.theme); + context, index, dateTimePickerConfiguration.theme); return GestureDetector( onTap: isDisabled( index, @@ -47,21 +50,21 @@ class WeekDateTimePicker extends StatelessWidget { timeOfDay = const TimeOfDay(hour: 0, minute: 0); - if (dateTimePickerController.pickTime) { + if (dateTimePickerConfiguration.pickTime) { timeOfDay = await displayTimePicker( context, dateTimePickerController); } - if (dateTimePickerController.wrongTimeDialog != null) { + if (dateTimePickerConfiguration.wrongTimeDialog != null) { if (timeOfDay != null && timeOfDay.containsAny( - dateTimePickerController.disabledTimes ?? [], + dateTimePickerConfiguration.disabledTimes ?? [], )) { if (context.mounted) { showDialog( context: context, builder: (context) => - dateTimePickerController.wrongTimeDialog!, + dateTimePickerConfiguration.wrongTimeDialog!, ); } } @@ -89,7 +92,7 @@ class WeekDateTimePicker extends StatelessWidget { date.daysOfWeek().elementAt(index), ) .toUpperCase()[0], - style: dateTimePickerController.theme.baseTheme.textStyle, + style: dateTimePickerConfiguration.theme.baseTheme.textStyle, ), const Spacer(), Container( @@ -98,7 +101,7 @@ class WeekDateTimePicker extends StatelessWidget { decoration: BoxDecoration( color: currentDateBoxTheme.backgroundColor, borderRadius: - _determineBorderRadius(dateTimePickerController), + _determineBorderRadius(dateTimePickerConfiguration), ), child: Stack( children: [ @@ -112,7 +115,7 @@ class WeekDateTimePicker extends StatelessWidget { MarkedIcon( width: weekDateBoxSize / 3, height: weekDateBoxSize / 3, - color: dateTimePickerController + color: dateTimePickerConfiguration .theme.markedIndicatorColor, ) ], @@ -165,7 +168,7 @@ class WeekDateTimePicker extends StatelessWidget { bool shouldHighlight(int index) { return date.daysOfWeek().elementAt(index).equals( - dateTimePickerController.highlightToday + dateTimePickerConfiguration.highlightToday ? DateTime.now() : dateTimePickerController.selectedDate, ); @@ -182,24 +185,24 @@ class WeekDateTimePicker extends StatelessWidget { return date .daysOfWeek() .elementAt(index) - .containsAny(dateTimePickerController.disabledDates ?? []); + .containsAny(dateTimePickerConfiguration.disabledDates ?? []); } bool shouldMark(int index) { return !date.daysOfWeek().elementAt(index).equals( - dateTimePickerController.highlightToday + dateTimePickerConfiguration.highlightToday ? DateTime.now() : dateTimePickerController.selectedDate, ) && date .daysOfWeek() .elementAt(index) - .containsAny(dateTimePickerController.markedDates ?? []); + .containsAny(dateTimePickerConfiguration.markedDates ?? []); } BorderRadius _determineBorderRadius( - DateTimePickerController dateTimePickerController) { - switch (dateTimePickerController.theme.dateBoxShape) { + DateTimePickerConfiguration dateTimePickerConfiguration) { + switch (dateTimePickerConfiguration.theme.dateBoxShape) { case DateBoxShape.circle: return BorderRadius.circular(weekDateBoxSize * 2); case DateBoxShape.rectangle: @@ -218,7 +221,7 @@ class WeekDateTimePicker extends StatelessWidget { return MediaQuery( data: MediaQuery.of(context).copyWith( alwaysUse24HourFormat: - dateTimePickerController.alwaysUse24HourFormat), + dateTimePickerConfiguration.alwaysUse24HourFormat), child: child!, ); }); diff --git a/lib/src/widgets/week_date_time_picker/week_date_time_picker_sheet.dart b/lib/src/widgets/week_date_time_picker/week_date_time_picker_sheet.dart index 0a3f94c..c1d7538 100644 --- a/lib/src/widgets/week_date_time_picker/week_date_time_picker_sheet.dart +++ b/lib/src/widgets/week_date_time_picker/week_date_time_picker_sheet.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart'; import 'package:flutter_date_time_picker/src/widgets/week_date_time_picker/week_date_time_picker.dart'; import 'package:intl/intl.dart'; @@ -11,12 +12,14 @@ import 'package:intl/intl.dart'; class WeekDateTimePickerSheet extends StatelessWidget { const WeekDateTimePickerSheet({ required this.dateTimePickerController, + required this.dateTimePickerConfiguration, required this.weekDateBoxSize, this.showHeader = false, Key? key, }) : super(key: key); final DateTimePickerController dateTimePickerController; + final DateTimePickerConfiguration dateTimePickerConfiguration; final bool showHeader; final double weekDateBoxSize; @@ -36,14 +39,14 @@ class WeekDateTimePickerSheet extends StatelessWidget { @override Widget build(BuildContext context) { - var theme = dateTimePickerController.theme; + var theme = dateTimePickerConfiguration.theme; return Column( children: [ - if (dateTimePickerController.header != null) + if (dateTimePickerConfiguration.header != null) Align( alignment: Alignment.topCenter, - child: dateTimePickerController.header!, + child: dateTimePickerConfiguration.header!, ), const SizedBox( height: 10, @@ -80,6 +83,7 @@ class WeekDateTimePickerSheet extends StatelessWidget { children: [ WeekDateTimePicker( dateTimePickerController: dateTimePickerController, + dateTimePickerConfiguration: dateTimePickerConfiguration, date: dateTimePickerController.browsingDate.subtract( const Duration(days: 7), ), @@ -87,11 +91,13 @@ class WeekDateTimePickerSheet extends StatelessWidget { ), WeekDateTimePicker( dateTimePickerController: dateTimePickerController, + dateTimePickerConfiguration: dateTimePickerConfiguration, date: dateTimePickerController.browsingDate, weekDateBoxSize: weekDateBoxSize, ), WeekDateTimePicker( dateTimePickerController: dateTimePickerController, + dateTimePickerConfiguration: dateTimePickerConfiguration, date: dateTimePickerController.browsingDate.add( const Duration(days: 7), ), diff --git a/test/flutter_date_time_picker_test.dart b/test/flutter_date_time_picker_test.dart index 367dacf..74a944d 100644 --- a/test/flutter_date_time_picker_test.dart +++ b/test/flutter_date_time_picker_test.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; +import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { @@ -14,9 +15,11 @@ void main() { appBar: AppBar(), body: DragDownDateTimePicker( controller: DateTimePickerController( + initialDate: DateTime.now(), + ), + configuration: DateTimePickerConfiguration( theme: const DateTimePickerTheme(), highlightToday: true, - initialDate: DateTime.now(), pickTime: false, ), child: Container(), @@ -33,9 +36,11 @@ void main() { appBar: AppBar(), body: DragDownDateTimePicker( controller: DateTimePickerController( + initialDate: DateTime.now(), + ), + configuration: DateTimePickerConfiguration( theme: const DateTimePickerTheme(), highlightToday: true, - initialDate: DateTime.now(), pickTime: false, ), child: Container(), From b0dea5e49b930facb7e4ecc06efd4c7372dda47a Mon Sep 17 00:00:00 2001 From: Jacques Date: Tue, 7 Nov 2023 09:29:57 +0100 Subject: [PATCH 3/4] fix: Unused imports --- lib/src/widgets/date_time_picker/date_time_picker.dart | 1 - lib/src/widgets/overlay_date_time_picker/date_picker.dart | 1 - lib/src/widgets/week_date_time_picker/week_date_time_picker.dart | 1 - test/flutter_date_time_picker_test.dart | 1 - 4 files changed, 4 deletions(-) diff --git a/lib/src/widgets/date_time_picker/date_time_picker.dart b/lib/src/widgets/date_time_picker/date_time_picker.dart index d44f6e5..40f286b 100644 --- a/lib/src/widgets/date_time_picker/date_time_picker.dart +++ b/lib/src/widgets/date_time_picker/date_time_picker.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart'; class DateTimePicker extends StatefulWidget { diff --git a/lib/src/widgets/overlay_date_time_picker/date_picker.dart b/lib/src/widgets/overlay_date_time_picker/date_picker.dart index 510a02d..c2b2188 100644 --- a/lib/src/widgets/overlay_date_time_picker/date_picker.dart +++ b/lib/src/widgets/overlay_date_time_picker/date_picker.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/pickable_date.dart'; import 'package:intl/intl.dart'; diff --git a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart index 7230a12..35c285e 100644 --- a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart +++ b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart @@ -7,7 +7,6 @@ import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; import 'package:flutter_date_time_picker/src/extensions/date_time.dart'; import 'package:flutter_date_time_picker/src/extensions/time_of_day.dart'; import 'package:flutter_date_time_picker/src/models/date_box_current_theme.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_date_time_picker/src/widgets/marked_icon.dart'; import 'package:intl/intl.dart'; diff --git a/test/flutter_date_time_picker_test.dart b/test/flutter_date_time_picker_test.dart index 74a944d..c704511 100644 --- a/test/flutter_date_time_picker_test.dart +++ b/test/flutter_date_time_picker_test.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_date_time_picker/flutter_date_time_picker.dart'; -import 'package:flutter_date_time_picker/src/utils/date_time_picker_config.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { From b61b24aa40dfe2a5b4bc42e7169ae26f6397b918 Mon Sep 17 00:00:00 2001 From: Jacques Date: Tue, 7 Nov 2023 09:47:27 +0100 Subject: [PATCH 4/4] fix: dart format --- .../widgets/week_date_time_picker/week_date_time_picker.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart index 35c285e..bc52789 100644 --- a/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart +++ b/lib/src/widgets/week_date_time_picker/week_date_time_picker.dart @@ -91,7 +91,8 @@ class WeekDateTimePicker extends StatelessWidget { date.daysOfWeek().elementAt(index), ) .toUpperCase()[0], - style: dateTimePickerConfiguration.theme.baseTheme.textStyle, + style: + dateTimePickerConfiguration.theme.baseTheme.textStyle, ), const Spacer(), Container(