Merge pull request #41 from Iconica-Development/feature/borderscroll

feat: Controller now has to be provided as parameter so the selected …
This commit is contained in:
Gorter-dev 2023-11-07 10:10:18 +01:00 committed by GitHub
commit 706ecf99f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 271 additions and 201 deletions

View file

@ -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 ## 3.3.3
- Added option for date box theme for marked dates and a boolean to use it - Added option for date box theme for marked dates and a boolean to use it

View file

@ -1,11 +1,11 @@
# This file tracks properties of this Flutter project. # This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc. # 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: version:
revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 revision: "6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e"
channel: stable channel: "stable"
project_type: app project_type: app
@ -13,11 +13,26 @@ project_type: app
migration: migration:
platforms: platforms:
- platform: root - platform: root
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 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 - platform: web
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e
- platform: windows
create_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e
base_revision: 6c4930c4ac86fb286f30e31d0ec8bffbcbb9953e
# User provided section # User provided section

View file

@ -156,32 +156,38 @@ class DatePickerDemo extends StatelessWidget {
), ),
DragDownDateTimePicker( DragDownDateTimePicker(
onTimerPickerSheetChange: (value) {}, onTimerPickerSheetChange: (value) {},
alwaysUse24HourFormat: true, controller: DateTimePickerController(
dateTimePickerTheme: const DateTimePickerTheme( initialDate: DateTime.now(),
backgroundColor: Colors.white, ),
markedIndicatorColor: Colors.red, configuration: DateTimePickerConfiguration(
baseTheme: DateBoxTheme( highlightToday: true,
alwaysUse24HourFormat: true,
markedDates: [DateTime.now().subtract(const Duration(days: 1))],
theme: const DateTimePickerTheme(
backgroundColor: Colors.white, backgroundColor: Colors.white,
textStyle: TextStyle(color: Colors.black), markedIndicatorColor: Colors.red,
), baseTheme: DateBoxTheme(
selectedTheme: DateBoxTheme( backgroundColor: Colors.white,
backgroundColor: Color(0x4BF44336), textStyle: TextStyle(color: Colors.black),
textStyle: TextStyle(
color: Colors.red,
), ),
), selectedTheme: DateBoxTheme(
highlightTheme: DateBoxTheme( backgroundColor: Color(0x4BF44336),
backgroundColor: Colors.red, textStyle: TextStyle(
textStyle: TextStyle( color: Colors.red,
color: Colors.white, ),
),
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))],
), ),
], ],
), ),

View file

@ -68,7 +68,7 @@ packages:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "3.3.2" version: "4.0.0"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:

View file

@ -5,6 +5,8 @@
library flutter_date_time_picker; library flutter_date_time_picker;
export 'src/drag_down_date_time_picker.dart' show DragDownDateTimePicker; 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/overlay_date_time_picker.dart' show OverlayDateTimePicker;
export 'src/models/date_constraint.dart'; export 'src/models/date_constraint.dart';
export 'src/enums/date_box_shape.dart'; export 'src/enums/date_box_shape.dart';

View file

@ -3,7 +3,8 @@
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; 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/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/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'; import 'package:flutter_date_time_picker/src/widgets/week_date_time_picker/week_date_time_picker_sheet.dart';
@ -15,59 +16,23 @@ class DragDownDateTimePicker extends StatefulWidget {
/// Both views can be dragged sideways to show the next or previous week/month. /// Both views can be dragged sideways to show the next or previous week/month.
const DragDownDateTimePicker({ const DragDownDateTimePicker({
this.dateTimePickerTheme = const DateTimePickerTheme(), required this.controller,
this.header, required this.configuration,
this.onTimerPickerSheetChange, this.onTimerPickerSheetChange,
this.onTapDay,
this.highlightToday = true,
this.wrongTimeDialog, this.wrongTimeDialog,
this.alwaysUse24HourFormat,
this.pickTime = false,
this.initialDate,
this.markedDates,
this.disabledDates,
this.disabledTimes,
this.child, this.child,
super.key, super.key,
}); });
final DateTimePickerController controller;
final DateTimePickerConfiguration configuration;
/// The child contained by the DatePicker. /// The child contained by the DatePicker.
final Widget? child; final Widget? child;
/// A [Widget] to display when the user picks a disabled time in the [TimePickerDialog] /// A [Widget] to display when the user picks a disabled time in the [TimePickerDialog]
final Widget? wrongTimeDialog; 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<DateTime>? markedDates;
/// a [List] of [DateTime] objects that will be disabled and cannot be interacted with whatsoever.
final List<DateTime>? disabledDates;
/// a [List] of [TimeOfDay] objects that cannot be picked in the [TimePickerDialog].
final List<TimeOfDay>? disabledTimes;
/// Function that gets called when the view changes from week to month or vice versa. /// Function that gets called when the view changes from week to month or vice versa.
/// The value is the amount of scrolledpixels. /// The value is the amount of scrolledpixels.
final Function(double)? onTimerPickerSheetChange; final Function(double)? onTimerPickerSheetChange;
@ -77,7 +42,8 @@ class DragDownDateTimePicker extends StatefulWidget {
} }
class _DragDownDateTimePickerState extends State<DragDownDateTimePicker> { class _DragDownDateTimePickerState extends State<DragDownDateTimePicker> {
late DateTimePickerController _dateTimePickerController; late final DateTimePickerController _dateTimePickerController =
widget.controller;
final DraggableScrollableController _dragController = final DraggableScrollableController _dragController =
DraggableScrollableController(); DraggableScrollableController();
@ -87,20 +53,6 @@ class _DragDownDateTimePickerState extends State<DragDownDateTimePicker> {
super.initState(); super.initState();
initializeDateFormatting(); 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(() { _dateTimePickerController.addListener(() {
setState(() {}); setState(() {});
}); });
@ -129,9 +81,9 @@ class _DragDownDateTimePickerState extends State<DragDownDateTimePicker> {
child: DraggableScrollableSheet( child: DraggableScrollableSheet(
controller: _dragController, controller: _dragController,
snap: true, snap: true,
minChildSize: _dateTimePickerController.theme.weekViewSize, minChildSize: widget.configuration.theme.weekViewSize,
initialChildSize: _dateTimePickerController.theme.weekViewSize, initialChildSize: widget.configuration.theme.weekViewSize,
maxChildSize: _dateTimePickerController.theme.monthViewSize, maxChildSize: widget.configuration.theme.monthViewSize,
builder: (context, scrollController) { builder: (context, scrollController) {
double dragSize = double dragSize =
_dragController.isAttached ? _dragController.size : 0; _dragController.isAttached ? _dragController.size : 0;
@ -147,8 +99,7 @@ class _DragDownDateTimePickerState extends State<DragDownDateTimePicker> {
padding: const EdgeInsets.only(bottom: 12.5), padding: const EdgeInsets.only(bottom: 12.5),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: color: widget.configuration.theme.backgroundColor,
_dateTimePickerController.theme.backgroundColor,
borderRadius: const BorderRadius.only( borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(20), bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20), bottomRight: Radius.circular(20),
@ -161,21 +112,25 @@ class _DragDownDateTimePickerState extends State<DragDownDateTimePicker> {
], ],
), ),
child: dragSize < child: dragSize <
_dateTimePickerController widget
.theme.weekMonthTriggerSize .configuration.theme.weekMonthTriggerSize
? WeekDateTimePickerSheet( ? WeekDateTimePickerSheet(
dateTimePickerController: dateTimePickerController:
_dateTimePickerController, _dateTimePickerController,
dateTimePickerConfiguration:
widget.configuration,
weekDateBoxSize: widget weekDateBoxSize: widget
.dateTimePickerTheme.weekDateBoxSize, .configuration.theme.weekDateBoxSize,
) )
: MonthDateTimePickerSheet( : MonthDateTimePickerSheet(
dateTimePickerController: dateTimePickerController:
_dateTimePickerController, _dateTimePickerController,
dateTimePickerConfiguration:
widget.configuration,
monthDateBoxSize: widget monthDateBoxSize: widget
.dateTimePickerTheme.monthDateBoxSize, .configuration.theme.monthDateBoxSize,
monthDatePadding: widget monthDatePadding: widget
.dateTimePickerTheme.monthDatePadding, .configuration.theme.monthDatePadding,
), ),
), ),
), ),

View file

@ -4,6 +4,7 @@
import 'package:flutter/material.dart'; 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/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/date_time_picker_controller.dart';
import 'package:flutter_date_time_picker/src/models/date_constraint.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'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart';
@ -106,6 +107,15 @@ class _OverlayDateTimePickerState extends State<OverlayDateTimePicker> {
late bool _isShown = widget.isShown; late bool _isShown = widget.isShown;
late final DateTimePickerController _dateTimePickerController; 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; _DropdownRoute? _dropdownRoute;
@ -114,21 +124,13 @@ class _OverlayDateTimePickerState extends State<OverlayDateTimePicker> {
super.initState(); super.initState();
initializeDateFormatting(); initializeDateFormatting();
_dateTimePickerController = 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) { onTapDayCallBack: (date) {
widget.onTapDay?.call(date); widget.onTapDay?.call(date);
if (widget.closeOnSelectDate) { if (widget.closeOnSelectDate) {
Navigator.of(context).pop(); Navigator.of(context).pop();
} }
}, },
browsingDate: widget.initialDate ?? DateTime.now(), initialDate: widget.initialDate ?? DateTime.now(),
selectedDate: widget.initialDate ?? DateTime.now(),
); );
} }
@ -232,6 +234,7 @@ class _OverlayDateTimePickerState extends State<OverlayDateTimePicker> {
weekdayTextStyle: widget.textStyle, weekdayTextStyle: widget.textStyle,
size: widget.size, size: widget.size,
controller: _dateTimePickerController, controller: _dateTimePickerController,
configuration: _dateTimePickerConfiguration,
showWeekDays: true, showWeekDays: true,
onNextDate: nextDate, onNextDate: nextDate,
onPreviousDate: previousDate, onPreviousDate: previousDate,

View file

@ -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<DateTime>? markedDates;
/// a [List] of [DateTime] objects that will be disabled and cannot be interacted with whatsoever.
final List<DateTime>? disabledDates;
/// a [List] of [TimeOfDay] objects that cannot be picked in the [TimePickerDialog].
final List<TimeOfDay>? 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;
}

View file

@ -3,44 +3,26 @@
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_date_time_picker/src/models/date_time_picker_theme.dart';
class DateTimePickerController extends ChangeNotifier { class DateTimePickerController extends ChangeNotifier {
DateTimePickerController({ DateTimePickerController({
required this.theme, required this.initialDate,
required this.highlightToday,
required this.pickTime,
required this.browsingDate,
required this.selectedDate,
this.alwaysUse24HourFormat,
this.header,
this.wrongTimeDialog,
this.markedDates,
this.disabledDates,
this.disabledTimes,
this.onTapDayCallBack, this.onTapDayCallBack,
this.onBorderScrollCallback,
}); });
/// Callback that provides the date tapped on as a [DateTime] object.
final Function(DateTime)? onTapDayCallBack;
/// 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); final PageController _pageController = PageController(initialPage: 1);
final bool highlightToday; late DateTime browsingDate = initialDate;
final bool? alwaysUse24HourFormat; late DateTime selectedDate = initialDate;
final Widget? header;
final Widget? wrongTimeDialog;
final DateTimePickerTheme theme;
final List<DateTime>? markedDates;
final List<DateTime>? disabledDates;
final List<TimeOfDay>? disabledTimes;
final bool pickTime;
final Function(DateTime)? onTapDayCallBack;
DateTime browsingDate;
DateTime selectedDate;
@override @override
void dispose() { void dispose() {
@ -74,6 +56,17 @@ class DateTimePickerController extends ChangeNotifier {
} }
} }
void onBorderScroll(DateTime date) {
browsingDate = date;
selectedDate = date;
notifyListeners();
onBorderScrollCallback?.call(
date,
);
}
PageController get pageController => _pageController; PageController get pageController => _pageController;
void setBrowsingDate(DateTime date) { void setBrowsingDate(DateTime date) {

View file

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_date_time_picker/flutter_date_time_picker.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'; import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart';
class DateTimePicker extends StatefulWidget { class DateTimePicker extends StatefulWidget {
@ -92,6 +91,15 @@ class DateTimePicker extends StatefulWidget {
class _DateTimePickerState extends State<DateTimePicker> { class _DateTimePickerState extends State<DateTimePicker> {
late final DateTimePickerController _dateTimePickerController = late final DateTimePickerController _dateTimePickerController =
DateTimePickerController( DateTimePickerController(
onTapDayCallBack: (date) {
widget.onTapDay?.call(date);
if (widget.closeOnSelectDate) {
Navigator.of(context).pop();
}
},
initialDate: widget.initialDate ?? DateTime.now(),
);
late final _dateTimePickerConfiguration = DateTimePickerConfiguration(
highlightToday: widget.highlightToday, highlightToday: widget.highlightToday,
alwaysUse24HourFormat: widget.alwaysUse24HourFormat, alwaysUse24HourFormat: widget.alwaysUse24HourFormat,
pickTime: widget.pickTime, pickTime: widget.pickTime,
@ -99,15 +107,8 @@ class _DateTimePickerState extends State<DateTimePicker> {
markedDates: widget.markedDates, markedDates: widget.markedDates,
disabledDates: widget.disabledDates, disabledDates: widget.disabledDates,
disabledTimes: widget.disabledTimes, disabledTimes: widget.disabledTimes,
onTapDayCallBack: (date) {
widget.onTapDay?.call(date);
if (widget.closeOnSelectDate) {
Navigator.of(context).pop();
}
},
browsingDate: widget.initialDate ?? DateTime.now(),
selectedDate: widget.initialDate ?? DateTime.now(),
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var size = MediaQuery.of(context).size; var size = MediaQuery.of(context).size;
@ -149,6 +150,7 @@ class _DateTimePickerState extends State<DateTimePicker> {
weekdayTextStyle: widget.weekdayTextStyle, weekdayTextStyle: widget.weekdayTextStyle,
size: widget.size ?? Size(size.width, size.height), size: widget.size ?? Size(size.width, size.height),
controller: _dateTimePickerController, controller: _dateTimePickerController,
configuration: _dateTimePickerConfiguration,
showWeekDays: true, showWeekDays: true,
onNextDate: nextDate, onNextDate: nextDate,
onPreviousDate: previousDate, onPreviousDate: previousDate,

View file

@ -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/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_box_current_theme.dart';
import 'package:flutter_date_time_picker/src/models/date_time_picker_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/utils/date_time_picker_controller.dart';
import 'package:flutter_date_time_picker/src/widgets/marked_icon.dart'; import 'package:flutter_date_time_picker/src/widgets/marked_icon.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -17,11 +18,13 @@ class MonthDateTimePicker extends StatelessWidget {
required this.date, required this.date,
required this.dateTimePickerController, required this.dateTimePickerController,
required this.monthDateBoxSize, required this.monthDateBoxSize,
required this.dateTimePickerConfiguration,
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
final DateTime date; final DateTime date;
final DateTimePickerController dateTimePickerController; final DateTimePickerController dateTimePickerController;
final DateTimePickerConfiguration dateTimePickerConfiguration;
final double monthDateBoxSize; final double monthDateBoxSize;
@override @override
@ -39,7 +42,7 @@ class MonthDateTimePicker extends StatelessWidget {
child: Center( child: Center(
child: Column( child: Column(
children: [ children: [
if (dateTimePickerController.theme.monthWeekDayHeaders) if (dateTimePickerConfiguration.theme.monthWeekDayHeaders)
Row( Row(
children: List.generate( children: List.generate(
7, 7,
@ -51,8 +54,8 @@ class MonthDateTimePicker extends StatelessWidget {
date.daysOfWeek().elementAt(index), date.daysOfWeek().elementAt(index),
) )
.toUpperCase()[0], .toUpperCase()[0],
style: style: dateTimePickerConfiguration
dateTimePickerController.theme.baseTheme.textStyle, .theme.baseTheme.textStyle,
), ),
), ),
), ),
@ -79,8 +82,11 @@ class MonthDateTimePicker extends StatelessWidget {
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
currentDateBoxTheme = determineCurrentDateBoxTheme(context, currentDateBoxTheme = determineCurrentDateBoxTheme(
addedIndex, daysToSkip, dateTimePickerController.theme); context,
addedIndex,
daysToSkip,
dateTimePickerConfiguration.theme);
return GestureDetector( return GestureDetector(
onTap: isDisabled( onTap: isDisabled(
@ -99,23 +105,24 @@ class MonthDateTimePicker extends StatelessWidget {
timeOfDay = const TimeOfDay(hour: 0, minute: 0); timeOfDay = const TimeOfDay(hour: 0, minute: 0);
if (dateTimePickerController.pickTime) { if (dateTimePickerConfiguration.pickTime) {
timeOfDay = await displayTimePicker( timeOfDay = await displayTimePicker(
context, dateTimePickerController); context, dateTimePickerConfiguration);
} }
if (dateTimePickerController.wrongTimeDialog != if (dateTimePickerConfiguration.wrongTimeDialog !=
null) { null) {
if (timeOfDay != null && if (timeOfDay != null &&
timeOfDay.containsAny( timeOfDay.containsAny(
dateTimePickerController.disabledTimes ?? dateTimePickerConfiguration
.disabledTimes ??
[], [],
)) { )) {
if (context.mounted) { if (context.mounted) {
showDialog( showDialog(
context: context, context: context,
builder: (context) => builder: (context) =>
dateTimePickerController dateTimePickerConfiguration
.wrongTimeDialog!, .wrongTimeDialog!,
); );
} }
@ -138,8 +145,8 @@ class MonthDateTimePicker extends StatelessWidget {
vertical: 5, horizontal: 5), vertical: 5, horizontal: 5),
decoration: BoxDecoration( decoration: BoxDecoration(
color: currentDateBoxTheme.backgroundColor, color: currentDateBoxTheme.backgroundColor,
borderRadius: borderRadius: _determineBorderRadius(
_determineBorderRadius(dateTimePickerController), dateTimePickerConfiguration),
), ),
height: monthDateBoxSize, height: monthDateBoxSize,
width: monthDateBoxSize, width: monthDateBoxSize,
@ -157,7 +164,7 @@ class MonthDateTimePicker extends StatelessWidget {
MarkedIcon( MarkedIcon(
width: monthDateBoxSize / 4, width: monthDateBoxSize / 4,
height: monthDateBoxSize / 4, height: monthDateBoxSize / 4,
color: dateTimePickerController color: dateTimePickerConfiguration
.theme.markedIndicatorColor, .theme.markedIndicatorColor,
), ),
], ],
@ -181,7 +188,7 @@ class MonthDateTimePicker extends StatelessWidget {
date.month, date.month,
index + 1 - daysToSkip, index + 1 - daysToSkip,
).equals( ).equals(
dateTimePickerController.highlightToday dateTimePickerConfiguration.highlightToday
? DateTime.now() ? DateTime.now()
: dateTimePickerController.selectedDate, : dateTimePickerController.selectedDate,
); );
@ -228,7 +235,7 @@ class MonthDateTimePicker extends StatelessWidget {
date.month, date.month,
index + 1 - daysToSkip, index + 1 - daysToSkip,
).containsAny( ).containsAny(
dateTimePickerController.disabledDates ?? [], dateTimePickerConfiguration.disabledDates ?? [],
); );
} }
@ -246,7 +253,7 @@ class MonthDateTimePicker extends StatelessWidget {
date.month, date.month,
index + 1 - daysToSkip, index + 1 - daysToSkip,
).equals( ).equals(
dateTimePickerController.highlightToday dateTimePickerConfiguration.highlightToday
? DateTime.now() ? DateTime.now()
: dateTimePickerController.selectedDate, : dateTimePickerController.selectedDate,
) && ) &&
@ -255,13 +262,13 @@ class MonthDateTimePicker extends StatelessWidget {
date.month, date.month,
index + 1 - daysToSkip, index + 1 - daysToSkip,
).containsAny( ).containsAny(
dateTimePickerController.markedDates ?? [], dateTimePickerConfiguration.markedDates ?? [],
); );
} }
BorderRadius _determineBorderRadius( BorderRadius _determineBorderRadius(
DateTimePickerController dateTimePickerController) { DateTimePickerConfiguration dateTimePickerConfiguration) {
switch (dateTimePickerController.theme.dateBoxShape) { switch (dateTimePickerConfiguration.theme.dateBoxShape) {
case DateBoxShape.circle: case DateBoxShape.circle:
return BorderRadius.circular(monthDateBoxSize * 2); return BorderRadius.circular(monthDateBoxSize * 2);
case DateBoxShape.rectangle: case DateBoxShape.rectangle:
@ -273,7 +280,7 @@ class MonthDateTimePicker extends StatelessWidget {
} }
displayTimePicker(BuildContext context, displayTimePicker(BuildContext context,
DateTimePickerController dateTimePickerController) async { DateTimePickerConfiguration dateTimePickerConfiguration) async {
return await showTimePicker( return await showTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
@ -281,7 +288,7 @@ displayTimePicker(BuildContext context,
return MediaQuery( return MediaQuery(
data: MediaQuery.of(context).copyWith( data: MediaQuery.of(context).copyWith(
alwaysUse24HourFormat: alwaysUse24HourFormat:
dateTimePickerController.alwaysUse24HourFormat), dateTimePickerConfiguration.alwaysUse24HourFormat),
child: child!, child: child!,
); );
}); });

View file

@ -4,6 +4,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_date_time_picker/src/extensions/date_time.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/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:flutter_date_time_picker/src/widgets/month_date_time_picker/month_date_time_picker.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -11,26 +12,28 @@ import 'package:intl/intl.dart';
class MonthDateTimePickerSheet extends StatelessWidget { class MonthDateTimePickerSheet extends StatelessWidget {
const MonthDateTimePickerSheet({ const MonthDateTimePickerSheet({
required this.dateTimePickerController, required this.dateTimePickerController,
required this.dateTimePickerConfiguration,
required this.monthDateBoxSize, required this.monthDateBoxSize,
required this.monthDatePadding, required this.monthDatePadding,
super.key, super.key,
}); });
final DateTimePickerController dateTimePickerController; final DateTimePickerController dateTimePickerController;
final DateTimePickerConfiguration dateTimePickerConfiguration;
final double monthDateBoxSize; final double monthDateBoxSize;
final EdgeInsetsGeometry monthDatePadding; final EdgeInsetsGeometry monthDatePadding;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var theme = dateTimePickerController.theme; var theme = dateTimePickerConfiguration.theme;
var size = MediaQuery.of(context).size; var size = MediaQuery.of(context).size;
return Column( return Column(
children: [ children: [
if (dateTimePickerController.header != null) ...[ if (dateTimePickerConfiguration.header != null) ...[
Align( Align(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
child: dateTimePickerController.header!, child: dateTimePickerConfiguration.header!,
), ),
], ],
Padding( Padding(
@ -74,13 +77,15 @@ class MonthDateTimePickerSheet extends StatelessWidget {
}, },
children: [ children: [
MonthDateTimePicker( MonthDateTimePicker(
date: dateTimePickerController.browsingDate.month == 1 date: dateTimePickerController.browsingDate.month == 1
? DateTime( ? DateTime(
dateTimePickerController.browsingDate.year - 1, 12, 1) dateTimePickerController.browsingDate.year - 1, 12, 1)
: DateTime(dateTimePickerController.browsingDate.year, : DateTime(dateTimePickerController.browsingDate.year,
dateTimePickerController.browsingDate.month - 1, 1), dateTimePickerController.browsingDate.month - 1, 1),
monthDateBoxSize: monthDateBoxSize, monthDateBoxSize: monthDateBoxSize,
dateTimePickerController: dateTimePickerController), dateTimePickerController: dateTimePickerController,
dateTimePickerConfiguration: dateTimePickerConfiguration,
),
MonthDateTimePicker( MonthDateTimePicker(
date: DateTime( date: DateTime(
dateTimePickerController.browsingDate.year, dateTimePickerController.browsingDate.year,
@ -88,6 +93,7 @@ class MonthDateTimePickerSheet extends StatelessWidget {
1, 1,
), ),
dateTimePickerController: dateTimePickerController, dateTimePickerController: dateTimePickerController,
dateTimePickerConfiguration: dateTimePickerConfiguration,
monthDateBoxSize: monthDateBoxSize), monthDateBoxSize: monthDateBoxSize),
MonthDateTimePicker( MonthDateTimePicker(
date: dateTimePickerController.browsingDate.month == 12 date: dateTimePickerController.browsingDate.month == 12
@ -99,6 +105,7 @@ class MonthDateTimePickerSheet extends StatelessWidget {
: DateTime(dateTimePickerController.browsingDate.year, : DateTime(dateTimePickerController.browsingDate.year,
dateTimePickerController.browsingDate.month + 1, 1), dateTimePickerController.browsingDate.month + 1, 1),
dateTimePickerController: dateTimePickerController, dateTimePickerController: dateTimePickerController,
dateTimePickerConfiguration: dateTimePickerConfiguration,
monthDateBoxSize: monthDateBoxSize), monthDateBoxSize: monthDateBoxSize),
], ],
), ),

View file

@ -5,7 +5,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_date_time_picker/flutter_date_time_picker.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/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:flutter_date_time_picker/src/widgets/overlay_date_time_picker/pickable_date.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -13,6 +12,7 @@ class DatePicker extends StatelessWidget {
const DatePicker({ const DatePicker({
super.key, super.key,
required this.controller, required this.controller,
required this.configuration,
required this.theme, required this.theme,
required this.weekdayTextStyle, required this.weekdayTextStyle,
required this.onSelectDate, required this.onSelectDate,
@ -22,6 +22,7 @@ class DatePicker extends StatelessWidget {
}); });
final DateTimePickerController controller; final DateTimePickerController controller;
final DateTimePickerConfiguration configuration;
final DateTimePickerTheme theme; final DateTimePickerTheme theme;
final TextStyle weekdayTextStyle; final TextStyle weekdayTextStyle;
final void Function(DateTime date) onSelectDate; final void Function(DateTime date) onSelectDate;
@ -95,7 +96,7 @@ class DatePicker extends StatelessWidget {
return Padding( return Padding(
padding: const EdgeInsets.all(2.0), padding: const EdgeInsets.all(2.0),
child: PickableDate( child: PickableDate(
isMarked: controller.markedDates?.any( isMarked: configuration.markedDates?.any(
(e) => isSameDay(e, todayDate), (e) => isSameDay(e, todayDate),
) ?? ) ??
false, false,
@ -103,7 +104,7 @@ class DatePicker extends StatelessWidget {
isDisabled: isDisabled:
isDisabled(addedIndex + index, daysToSkip, todayDate), isDisabled(addedIndex + index, daysToSkip, todayDate),
isSelected: controller.selectedDate == todayDate, isSelected: controller.selectedDate == todayDate,
isToday: isToday(todayDate) && controller.highlightToday, isToday: isToday(todayDate) && configuration.highlightToday,
theme: theme, theme: theme,
date: todayDate, date: todayDate,
onPressed: onSelectDate, onPressed: onSelectDate,
@ -131,7 +132,7 @@ class DatePicker extends StatelessWidget {
date.month, date.month,
index + 1 - daysToSkip, index + 1 - daysToSkip,
).containsAny( ).containsAny(
controller.disabledDates ?? [], configuration.disabledDates ?? [],
) || ) ||
!dateTimeConstraint.inRange(date); !dateTimeConstraint.inRange(date);
} }

View file

@ -4,6 +4,7 @@
import 'package:flutter/material.dart'; 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/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/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/utils/locking_page_scroll_physics.dart';
import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/date_picker.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.weekdayTextStyle,
required this.size, required this.size,
required this.controller, required this.controller,
required this.configuration,
required this.showWeekDays, required this.showWeekDays,
required this.onNextDate, required this.onNextDate,
required this.onPreviousDate, required this.onPreviousDate,
@ -29,6 +31,7 @@ class OverlayDateTimeContent extends StatefulWidget {
final TextStyle weekdayTextStyle; final TextStyle weekdayTextStyle;
final Size size; final Size size;
final DateTimePickerController controller; final DateTimePickerController controller;
final DateTimePickerConfiguration configuration;
final bool showWeekDays; final bool showWeekDays;
final DateTimeConstraint dateTimeConstraint; final DateTimeConstraint dateTimeConstraint;
@ -149,6 +152,7 @@ class _OverlayDateTimeContentState extends State<OverlayDateTimeContent> {
children: [ children: [
DatePicker( DatePicker(
controller: widget.controller, controller: widget.controller,
configuration: widget.configuration,
onSelectDate: _onSelectDate, onSelectDate: _onSelectDate,
theme: widget.theme, theme: widget.theme,
weekdayTextStyle: widget.weekdayTextStyle, weekdayTextStyle: widget.weekdayTextStyle,
@ -158,6 +162,7 @@ class _OverlayDateTimeContentState extends State<OverlayDateTimeContent> {
), ),
DatePicker( DatePicker(
controller: widget.controller, controller: widget.controller,
configuration: widget.configuration,
onSelectDate: _onSelectDate, onSelectDate: _onSelectDate,
theme: widget.theme, theme: widget.theme,
weekdayTextStyle: widget.weekdayTextStyle, weekdayTextStyle: widget.weekdayTextStyle,
@ -167,6 +172,7 @@ class _OverlayDateTimeContentState extends State<OverlayDateTimeContent> {
), ),
DatePicker( DatePicker(
controller: widget.controller, controller: widget.controller,
configuration: widget.configuration,
onSelectDate: _onSelectDate, onSelectDate: _onSelectDate,
theme: widget.theme, theme: widget.theme,
weekdayTextStyle: widget.weekdayTextStyle, weekdayTextStyle: widget.weekdayTextStyle,

View file

@ -7,19 +7,20 @@ 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/date_time.dart';
import 'package:flutter_date_time_picker/src/extensions/time_of_day.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_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:flutter_date_time_picker/src/widgets/marked_icon.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
class WeekDateTimePicker extends StatelessWidget { class WeekDateTimePicker extends StatelessWidget {
const WeekDateTimePicker({ const WeekDateTimePicker({
required this.dateTimePickerController, required this.dateTimePickerController,
required this.dateTimePickerConfiguration,
required this.date, required this.date,
required this.weekDateBoxSize, required this.weekDateBoxSize,
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
final DateTimePickerController dateTimePickerController; final DateTimePickerController dateTimePickerController;
final DateTimePickerConfiguration dateTimePickerConfiguration;
final DateTime date; final DateTime date;
@ -35,7 +36,7 @@ class WeekDateTimePicker extends StatelessWidget {
late DateBoxCurrentTheme currentDateBoxTheme; late DateBoxCurrentTheme currentDateBoxTheme;
currentDateBoxTheme = determineCurrentDateBoxTheme( currentDateBoxTheme = determineCurrentDateBoxTheme(
context, index, dateTimePickerController.theme); context, index, dateTimePickerConfiguration.theme);
return GestureDetector( return GestureDetector(
onTap: isDisabled( onTap: isDisabled(
index, index,
@ -48,21 +49,21 @@ class WeekDateTimePicker extends StatelessWidget {
timeOfDay = const TimeOfDay(hour: 0, minute: 0); timeOfDay = const TimeOfDay(hour: 0, minute: 0);
if (dateTimePickerController.pickTime) { if (dateTimePickerConfiguration.pickTime) {
timeOfDay = await displayTimePicker( timeOfDay = await displayTimePicker(
context, dateTimePickerController); context, dateTimePickerController);
} }
if (dateTimePickerController.wrongTimeDialog != null) { if (dateTimePickerConfiguration.wrongTimeDialog != null) {
if (timeOfDay != null && if (timeOfDay != null &&
timeOfDay.containsAny( timeOfDay.containsAny(
dateTimePickerController.disabledTimes ?? [], dateTimePickerConfiguration.disabledTimes ?? [],
)) { )) {
if (context.mounted) { if (context.mounted) {
showDialog( showDialog(
context: context, context: context,
builder: (context) => builder: (context) =>
dateTimePickerController.wrongTimeDialog!, dateTimePickerConfiguration.wrongTimeDialog!,
); );
} }
} }
@ -90,7 +91,8 @@ class WeekDateTimePicker extends StatelessWidget {
date.daysOfWeek().elementAt(index), date.daysOfWeek().elementAt(index),
) )
.toUpperCase()[0], .toUpperCase()[0],
style: dateTimePickerController.theme.baseTheme.textStyle, style:
dateTimePickerConfiguration.theme.baseTheme.textStyle,
), ),
const Spacer(), const Spacer(),
Container( Container(
@ -99,7 +101,7 @@ class WeekDateTimePicker extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
color: currentDateBoxTheme.backgroundColor, color: currentDateBoxTheme.backgroundColor,
borderRadius: borderRadius:
_determineBorderRadius(dateTimePickerController), _determineBorderRadius(dateTimePickerConfiguration),
), ),
child: Stack( child: Stack(
children: [ children: [
@ -113,7 +115,7 @@ class WeekDateTimePicker extends StatelessWidget {
MarkedIcon( MarkedIcon(
width: weekDateBoxSize / 3, width: weekDateBoxSize / 3,
height: weekDateBoxSize / 3, height: weekDateBoxSize / 3,
color: dateTimePickerController color: dateTimePickerConfiguration
.theme.markedIndicatorColor, .theme.markedIndicatorColor,
) )
], ],
@ -166,7 +168,7 @@ class WeekDateTimePicker extends StatelessWidget {
bool shouldHighlight(int index) { bool shouldHighlight(int index) {
return date.daysOfWeek().elementAt(index).equals( return date.daysOfWeek().elementAt(index).equals(
dateTimePickerController.highlightToday dateTimePickerConfiguration.highlightToday
? DateTime.now() ? DateTime.now()
: dateTimePickerController.selectedDate, : dateTimePickerController.selectedDate,
); );
@ -183,24 +185,24 @@ class WeekDateTimePicker extends StatelessWidget {
return date return date
.daysOfWeek() .daysOfWeek()
.elementAt(index) .elementAt(index)
.containsAny(dateTimePickerController.disabledDates ?? []); .containsAny(dateTimePickerConfiguration.disabledDates ?? []);
} }
bool shouldMark(int index) { bool shouldMark(int index) {
return !date.daysOfWeek().elementAt(index).equals( return !date.daysOfWeek().elementAt(index).equals(
dateTimePickerController.highlightToday dateTimePickerConfiguration.highlightToday
? DateTime.now() ? DateTime.now()
: dateTimePickerController.selectedDate, : dateTimePickerController.selectedDate,
) && ) &&
date date
.daysOfWeek() .daysOfWeek()
.elementAt(index) .elementAt(index)
.containsAny(dateTimePickerController.markedDates ?? []); .containsAny(dateTimePickerConfiguration.markedDates ?? []);
} }
BorderRadius _determineBorderRadius( BorderRadius _determineBorderRadius(
DateTimePickerController dateTimePickerController) { DateTimePickerConfiguration dateTimePickerConfiguration) {
switch (dateTimePickerController.theme.dateBoxShape) { switch (dateTimePickerConfiguration.theme.dateBoxShape) {
case DateBoxShape.circle: case DateBoxShape.circle:
return BorderRadius.circular(weekDateBoxSize * 2); return BorderRadius.circular(weekDateBoxSize * 2);
case DateBoxShape.rectangle: case DateBoxShape.rectangle:
@ -219,7 +221,7 @@ class WeekDateTimePicker extends StatelessWidget {
return MediaQuery( return MediaQuery(
data: MediaQuery.of(context).copyWith( data: MediaQuery.of(context).copyWith(
alwaysUse24HourFormat: alwaysUse24HourFormat:
dateTimePickerController.alwaysUse24HourFormat), dateTimePickerConfiguration.alwaysUse24HourFormat),
child: child!, child: child!,
); );
}); });

View file

@ -4,6 +4,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_date_time_picker/src/extensions/date_time.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/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:flutter_date_time_picker/src/widgets/week_date_time_picker/week_date_time_picker.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -11,12 +12,14 @@ import 'package:intl/intl.dart';
class WeekDateTimePickerSheet extends StatelessWidget { class WeekDateTimePickerSheet extends StatelessWidget {
const WeekDateTimePickerSheet({ const WeekDateTimePickerSheet({
required this.dateTimePickerController, required this.dateTimePickerController,
required this.dateTimePickerConfiguration,
required this.weekDateBoxSize, required this.weekDateBoxSize,
this.showHeader = false, this.showHeader = false,
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
final DateTimePickerController dateTimePickerController; final DateTimePickerController dateTimePickerController;
final DateTimePickerConfiguration dateTimePickerConfiguration;
final bool showHeader; final bool showHeader;
final double weekDateBoxSize; final double weekDateBoxSize;
@ -36,14 +39,14 @@ class WeekDateTimePickerSheet extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var theme = dateTimePickerController.theme; var theme = dateTimePickerConfiguration.theme;
return Column( return Column(
children: [ children: [
if (dateTimePickerController.header != null) if (dateTimePickerConfiguration.header != null)
Align( Align(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
child: dateTimePickerController.header!, child: dateTimePickerConfiguration.header!,
), ),
const SizedBox( const SizedBox(
height: 10, height: 10,
@ -80,6 +83,7 @@ class WeekDateTimePickerSheet extends StatelessWidget {
children: [ children: [
WeekDateTimePicker( WeekDateTimePicker(
dateTimePickerController: dateTimePickerController, dateTimePickerController: dateTimePickerController,
dateTimePickerConfiguration: dateTimePickerConfiguration,
date: dateTimePickerController.browsingDate.subtract( date: dateTimePickerController.browsingDate.subtract(
const Duration(days: 7), const Duration(days: 7),
), ),
@ -87,11 +91,13 @@ class WeekDateTimePickerSheet extends StatelessWidget {
), ),
WeekDateTimePicker( WeekDateTimePicker(
dateTimePickerController: dateTimePickerController, dateTimePickerController: dateTimePickerController,
dateTimePickerConfiguration: dateTimePickerConfiguration,
date: dateTimePickerController.browsingDate, date: dateTimePickerController.browsingDate,
weekDateBoxSize: weekDateBoxSize, weekDateBoxSize: weekDateBoxSize,
), ),
WeekDateTimePicker( WeekDateTimePicker(
dateTimePickerController: dateTimePickerController, dateTimePickerController: dateTimePickerController,
dateTimePickerConfiguration: dateTimePickerConfiguration,
date: dateTimePickerController.browsingDate.add( date: dateTimePickerController.browsingDate.add(
const Duration(days: 7), const Duration(days: 7),
), ),

View file

@ -1,6 +1,6 @@
name: flutter_date_time_picker name: flutter_date_time_picker
description: A Flutter package for date and time picker. description: A Flutter package for date and time picker.
version: 3.3.3 version: 4.0.0
environment: environment:
sdk: ">=3.0.0 <4.0.0" sdk: ">=3.0.0 <4.0.0"

View file

@ -13,7 +13,14 @@ void main() {
home: Scaffold( home: Scaffold(
appBar: AppBar(), appBar: AppBar(),
body: DragDownDateTimePicker( body: DragDownDateTimePicker(
pickTime: false, controller: DateTimePickerController(
initialDate: DateTime.now(),
),
configuration: DateTimePickerConfiguration(
theme: const DateTimePickerTheme(),
highlightToday: true,
pickTime: false,
),
child: Container(), child: Container(),
), ),
), ),
@ -27,7 +34,14 @@ void main() {
home: Scaffold( home: Scaffold(
appBar: AppBar(), appBar: AppBar(),
body: DragDownDateTimePicker( body: DragDownDateTimePicker(
pickTime: false, controller: DateTimePickerController(
initialDate: DateTime.now(),
),
configuration: DateTimePickerConfiguration(
theme: const DateTimePickerTheme(),
highlightToday: true,
pickTime: false,
),
child: Container(), child: Container(),
), ),
), ),