mirror of
https://github.com/Iconica-Development/flutter_date_time_picker.git
synced 2025-05-18 18:33:49 +02:00
fix: Split the controller into a configration and controller.
This commit is contained in:
parent
61e2b849fa
commit
5f24c04248
16 changed files with 206 additions and 126 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,8 @@ class DatePickerDemo extends StatelessWidget {
|
||||||
onTimerPickerSheetChange: (value) {},
|
onTimerPickerSheetChange: (value) {},
|
||||||
controller: DateTimePickerController(
|
controller: DateTimePickerController(
|
||||||
initialDate: DateTime.now(),
|
initialDate: DateTime.now(),
|
||||||
|
),
|
||||||
|
configuration: DateTimePickerConfiguration(
|
||||||
highlightToday: true,
|
highlightToday: true,
|
||||||
alwaysUse24HourFormat: true,
|
alwaysUse24HourFormat: true,
|
||||||
markedDates: [DateTime.now().subtract(const Duration(days: 1))],
|
markedDates: [DateTime.now().subtract(const Duration(days: 1))],
|
||||||
|
|
|
@ -68,7 +68,7 @@ packages:
|
||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "3.3.3"
|
version: "4.0.0"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -6,6 +6,7 @@ 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_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';
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// 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/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';
|
||||||
|
@ -16,6 +17,7 @@ class DragDownDateTimePicker extends StatefulWidget {
|
||||||
|
|
||||||
const DragDownDateTimePicker({
|
const DragDownDateTimePicker({
|
||||||
required this.controller,
|
required this.controller,
|
||||||
|
required this.configuration,
|
||||||
this.onTimerPickerSheetChange,
|
this.onTimerPickerSheetChange,
|
||||||
this.wrongTimeDialog,
|
this.wrongTimeDialog,
|
||||||
this.child,
|
this.child,
|
||||||
|
@ -23,6 +25,7 @@ class DragDownDateTimePicker extends StatefulWidget {
|
||||||
});
|
});
|
||||||
|
|
||||||
final DateTimePickerController controller;
|
final DateTimePickerController controller;
|
||||||
|
final DateTimePickerConfiguration configuration;
|
||||||
|
|
||||||
/// The child contained by the DatePicker.
|
/// The child contained by the DatePicker.
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
|
@ -78,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;
|
||||||
|
@ -96,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),
|
||||||
|
@ -110,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,
|
||||||
weekDateBoxSize:
|
dateTimePickerConfiguration:
|
||||||
widget.controller.theme.weekDateBoxSize,
|
widget.configuration,
|
||||||
|
weekDateBoxSize: widget
|
||||||
|
.configuration.theme.weekDateBoxSize,
|
||||||
)
|
)
|
||||||
: MonthDateTimePickerSheet(
|
: MonthDateTimePickerSheet(
|
||||||
dateTimePickerController:
|
dateTimePickerController:
|
||||||
_dateTimePickerController,
|
_dateTimePickerController,
|
||||||
monthDateBoxSize:
|
dateTimePickerConfiguration:
|
||||||
widget.controller.theme.monthDateBoxSize,
|
widget.configuration,
|
||||||
monthDatePadding:
|
monthDateBoxSize: widget
|
||||||
widget.controller.theme.monthDatePadding,
|
.configuration.theme.monthDateBoxSize,
|
||||||
|
monthDatePadding: widget
|
||||||
|
.configuration.theme.monthDatePadding,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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,13 +124,6 @@ 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) {
|
||||||
|
@ -231,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,
|
||||||
|
|
47
lib/src/utils/date_time_picker_config.dart
Normal file
47
lib/src/utils/date_time_picker_config.dart
Normal 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;
|
||||||
|
}
|
|
@ -3,51 +3,14 @@
|
||||||
// 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.highlightToday,
|
|
||||||
required this.initialDate,
|
required this.initialDate,
|
||||||
this.pickTime = false,
|
|
||||||
this.alwaysUse24HourFormat,
|
|
||||||
this.header,
|
|
||||||
this.wrongTimeDialog,
|
|
||||||
this.markedDates,
|
|
||||||
this.disabledDates,
|
|
||||||
this.disabledTimes,
|
|
||||||
this.onTapDayCallBack,
|
this.onTapDayCallBack,
|
||||||
this.onBorderScrollCallback,
|
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<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;
|
|
||||||
|
|
||||||
/// Callback that provides the date tapped on as a [DateTime] object.
|
/// Callback that provides the date tapped on as a [DateTime] object.
|
||||||
final Function(DateTime)? onTapDayCallBack;
|
final Function(DateTime)? onTapDayCallBack;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,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/utils/date_time_picker_config.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 {
|
||||||
|
@ -91,13 +92,6 @@ class DateTimePicker extends StatefulWidget {
|
||||||
class _DateTimePickerState extends State<DateTimePicker> {
|
class _DateTimePickerState extends State<DateTimePicker> {
|
||||||
late final DateTimePickerController _dateTimePickerController =
|
late final 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) {
|
||||||
|
@ -106,6 +100,16 @@ class _DateTimePickerState extends State<DateTimePicker> {
|
||||||
},
|
},
|
||||||
initialDate: widget.initialDate ?? DateTime.now(),
|
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var size = MediaQuery.of(context).size;
|
var size = MediaQuery.of(context).size;
|
||||||
|
@ -147,6 +151,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,
|
||||||
|
|
|
@ -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!,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -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(
|
||||||
|
@ -80,7 +83,9 @@ class MonthDateTimePickerSheet extends StatelessWidget {
|
||||||
: 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),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
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_config.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';
|
||||||
|
|
||||||
|
@ -12,6 +13,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,
|
||||||
|
@ -21,6 +23,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;
|
||||||
|
@ -94,7 +97,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,
|
||||||
|
@ -102,7 +105,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,
|
||||||
|
@ -130,7 +133,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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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/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_config.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;
|
||||||
|
|
||||||
|
@ -34,7 +37,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,
|
||||||
|
@ -47,21 +50,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!,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +92,7 @@ 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(
|
||||||
|
@ -98,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: [
|
||||||
|
@ -112,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,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
@ -165,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,
|
||||||
);
|
);
|
||||||
|
@ -182,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:
|
||||||
|
@ -218,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!,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -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),
|
||||||
),
|
),
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
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_config.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
@ -14,9 +15,11 @@ void main() {
|
||||||
appBar: AppBar(),
|
appBar: AppBar(),
|
||||||
body: DragDownDateTimePicker(
|
body: DragDownDateTimePicker(
|
||||||
controller: DateTimePickerController(
|
controller: DateTimePickerController(
|
||||||
|
initialDate: DateTime.now(),
|
||||||
|
),
|
||||||
|
configuration: DateTimePickerConfiguration(
|
||||||
theme: const DateTimePickerTheme(),
|
theme: const DateTimePickerTheme(),
|
||||||
highlightToday: true,
|
highlightToday: true,
|
||||||
initialDate: DateTime.now(),
|
|
||||||
pickTime: false,
|
pickTime: false,
|
||||||
),
|
),
|
||||||
child: Container(),
|
child: Container(),
|
||||||
|
@ -33,9 +36,11 @@ void main() {
|
||||||
appBar: AppBar(),
|
appBar: AppBar(),
|
||||||
body: DragDownDateTimePicker(
|
body: DragDownDateTimePicker(
|
||||||
controller: DateTimePickerController(
|
controller: DateTimePickerController(
|
||||||
|
initialDate: DateTime.now(),
|
||||||
|
),
|
||||||
|
configuration: DateTimePickerConfiguration(
|
||||||
theme: const DateTimePickerTheme(),
|
theme: const DateTimePickerTheme(),
|
||||||
highlightToday: true,
|
highlightToday: true,
|
||||||
initialDate: DateTime.now(),
|
|
||||||
pickTime: false,
|
pickTime: false,
|
||||||
),
|
),
|
||||||
child: Container(),
|
child: Container(),
|
||||||
|
|
Loading…
Reference in a new issue