mirror of
https://github.com/Iconica-Development/flutter_date_time_picker.git
synced 2025-05-18 18:33:49 +02:00
Merge pull request #22 from Iconica-Development/feature/date_time_picker
Calendar component available without button functionality
This commit is contained in:
commit
36b323022b
10 changed files with 275 additions and 48 deletions
|
@ -1,7 +1,12 @@
|
||||||
|
## 2.3.0
|
||||||
|
|
||||||
|
- Added availability of datetimepicker without button
|
||||||
|
|
||||||
## 2.2.4
|
## 2.2.4
|
||||||
|
|
||||||
- Fixed drag down date time picker not rebuilding
|
- Fixed drag down date time picker not rebuilding
|
||||||
|
|
||||||
|
|
||||||
## 2.2.3
|
## 2.2.3
|
||||||
|
|
||||||
- Fixed skipping month bug
|
- Fixed skipping month bug
|
||||||
|
|
|
@ -79,6 +79,14 @@ class DatePickerDemo extends StatelessWidget {
|
||||||
),
|
),
|
||||||
body: Stack(
|
body: Stack(
|
||||||
children: [
|
children: [
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: DateTimePicker(
|
||||||
|
theme: dateTimePickerTheme,
|
||||||
|
size: const Size(270, 340),
|
||||||
|
onTapDay: (date) {},
|
||||||
|
),
|
||||||
|
),
|
||||||
Center(
|
Center(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 51;
|
objectVersion = 54;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXAggregateTarget section */
|
/* Begin PBXAggregateTarget section */
|
||||||
|
@ -235,6 +235,7 @@
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
3399D490228B24CF009A79C7 /* ShellScript */ = {
|
3399D490228B24CF009A79C7 /* ShellScript */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
alwaysOutOfDate = 1;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
|
@ -344,7 +345,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_COMPILATION_MODE = wholemodule;
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
@ -423,7 +424,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -470,7 +471,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_COMPILATION_MODE = wholemodule;
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
|
|
@ -5,49 +5,56 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
url: "https://pub.dartlang.org"
|
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.9.0"
|
version: "2.10.0"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: boolean_selector
|
name: boolean_selector
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.1"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: characters
|
name: characters
|
||||||
url: "https://pub.dartlang.org"
|
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.1"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: clock
|
name: clock
|
||||||
url: "https://pub.dartlang.org"
|
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.1"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
url: "https://pub.dartlang.org"
|
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.16.0"
|
version: "1.17.0"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
url: "https://pub.dartlang.org"
|
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.5"
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
flutter:
|
flutter:
|
||||||
|
@ -61,12 +68,13 @@ packages:
|
||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "2.2.2"
|
version: "2.2.3"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_lints
|
name: flutter_lints
|
||||||
url: "https://pub.dartlang.org"
|
sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.1"
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
|
@ -83,42 +91,56 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: intl
|
name: intl
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.17.0"
|
version: "0.17.0"
|
||||||
|
js:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: js
|
||||||
|
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.5"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.1"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.12"
|
version: "0.12.13"
|
||||||
material_color_utilities:
|
material_color_utilities:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
url: "https://pub.dartlang.org"
|
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.5"
|
version: "0.2.0"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0"
|
version: "1.8.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.2"
|
version: "1.8.2"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
|
@ -130,51 +152,58 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
url: "https://pub.dartlang.org"
|
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
url: "https://pub.dartlang.org"
|
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.10.0"
|
version: "1.11.0"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stream_channel
|
name: stream_channel
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.1"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.2.0"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
url: "https://pub.dartlang.org"
|
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.1"
|
||||||
test_api:
|
test_api:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.12"
|
version: "0.4.16"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
url: "https://pub.dartlang.org"
|
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
||||||
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.4"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.17.6 <3.0.0"
|
dart: ">=2.18.0 <4.0.0"
|
||||||
flutter: ">=2.0.0"
|
flutter: ">=2.0.0"
|
||||||
|
|
|
@ -14,3 +14,4 @@ export 'src/models/date_box_highlight_theme.dart';
|
||||||
export 'src/models/date_box_selected_theme.dart';
|
export 'src/models/date_box_selected_theme.dart';
|
||||||
export 'src/models/date_time_picker_theme.dart';
|
export 'src/models/date_time_picker_theme.dart';
|
||||||
export 'src/models/date_time_picker_bar_theme.dart';
|
export 'src/models/date_time_picker_bar_theme.dart';
|
||||||
|
export 'src/widgets/date_time_picker/date_time_picker.dart';
|
||||||
|
|
|
@ -30,8 +30,12 @@ class OverlayDateTimePicker extends StatefulWidget {
|
||||||
this.dateTimeConstraint = const DateTimeConstraint(),
|
this.dateTimeConstraint = const DateTimeConstraint(),
|
||||||
this.onNextPageButtonBuilder,
|
this.onNextPageButtonBuilder,
|
||||||
this.onPreviousPageButtonBuilder,
|
this.onPreviousPageButtonBuilder,
|
||||||
|
this.isShown = false,
|
||||||
}) : assert(child != null || buttonBuilder != null);
|
}) : assert(child != null || buttonBuilder != null);
|
||||||
|
|
||||||
|
/// Determines wether the datepicker is shown at start.
|
||||||
|
final bool isShown;
|
||||||
|
|
||||||
/// The child contained by the DatePicker.
|
/// The child contained by the DatePicker.
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
|
|
||||||
|
@ -99,7 +103,7 @@ class _OverlayDateTimePickerState extends State<OverlayDateTimePicker> {
|
||||||
debugLabel: "Overlay Date Time Picker - Button",
|
debugLabel: "Overlay Date Time Picker - Button",
|
||||||
);
|
);
|
||||||
|
|
||||||
bool _isShown = false;
|
late bool _isShown = widget.isShown;
|
||||||
|
|
||||||
_DropdownRoute? _dropdownRoute;
|
_DropdownRoute? _dropdownRoute;
|
||||||
|
|
||||||
|
|
174
lib/src/widgets/date_time_picker/date_time_picker.dart
Normal file
174
lib/src/widgets/date_time_picker/date_time_picker.dart
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_date_time_picker/flutter_date_time_picker.dart';
|
||||||
|
import 'package:flutter_date_time_picker/src/utils/date_time_picker_controller.dart';
|
||||||
|
import 'package:flutter_date_time_picker/src/widgets/overlay_date_time_picker/overlay.dart';
|
||||||
|
|
||||||
|
class DateTimePicker extends StatefulWidget {
|
||||||
|
/// The child contained by the DatePicker.
|
||||||
|
final Widget? child;
|
||||||
|
|
||||||
|
/// Visual properties for the [OverlayDateTimePicker]
|
||||||
|
final DateTimePickerTheme theme;
|
||||||
|
|
||||||
|
/// Style to base the text on
|
||||||
|
final TextStyle textStyle;
|
||||||
|
|
||||||
|
/// Callback that provides the date tapped on as a [DateTime] object.
|
||||||
|
final Function(DateTime date)? onTapDay;
|
||||||
|
|
||||||
|
/// Whether the current day should be highlighted in the [OverlayDateTimePicker]
|
||||||
|
final bool highlightToday;
|
||||||
|
|
||||||
|
/// a [bool] to set de clock on [TimePickerDialog] to a fixed 24 or 12-hour format.
|
||||||
|
final bool alwaysUse24HourFormat;
|
||||||
|
|
||||||
|
/// 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;
|
||||||
|
|
||||||
|
/// contain the dates [DateTime] that will be marked in the [OverlayDateTimePicker] 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;
|
||||||
|
|
||||||
|
/// a [Size] that indicates the size of the overlay
|
||||||
|
final Size size;
|
||||||
|
|
||||||
|
/// [buttonBuilder] is a method for building the button that can trigger the overlay to appear
|
||||||
|
final Widget Function(Key key, void Function() onPressed)? buttonBuilder;
|
||||||
|
|
||||||
|
/// is a [bool] that indicates if the overlay should be closed if a date has been picked.
|
||||||
|
final bool closeOnSelectDate;
|
||||||
|
|
||||||
|
/// [showWeekDays] is a [bool] that determines if day in the week indicators should be shown
|
||||||
|
final bool showWeekDays;
|
||||||
|
|
||||||
|
/// a [DateTimeConstraint] that dictates the constraints of the dates that can be picked.
|
||||||
|
final DateTimeConstraint dateTimeConstraint;
|
||||||
|
|
||||||
|
/// a [Function] that determents the icon of the button for going to the next page
|
||||||
|
final Widget Function(void Function()? onPressed)? onNextPageButtonBuilder;
|
||||||
|
|
||||||
|
/// a [Function] that determents the icon of the button for going to the previous page
|
||||||
|
final Widget Function(void Function()? onPressed)?
|
||||||
|
onPreviousPageButtonBuilder;
|
||||||
|
|
||||||
|
const DateTimePicker(
|
||||||
|
{super.key,
|
||||||
|
this.child,
|
||||||
|
required this.theme,
|
||||||
|
this.textStyle = const TextStyle(),
|
||||||
|
this.onTapDay,
|
||||||
|
this.highlightToday = true,
|
||||||
|
this.alwaysUse24HourFormat = true,
|
||||||
|
this.pickTime = false,
|
||||||
|
this.initialDate,
|
||||||
|
this.markedDates,
|
||||||
|
this.disabledDates,
|
||||||
|
this.disabledTimes,
|
||||||
|
required this.size,
|
||||||
|
this.buttonBuilder,
|
||||||
|
this.closeOnSelectDate = false,
|
||||||
|
this.showWeekDays = true,
|
||||||
|
this.dateTimeConstraint = const DateTimeConstraint(),
|
||||||
|
this.onNextPageButtonBuilder,
|
||||||
|
this.onPreviousPageButtonBuilder});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<DateTimePicker> createState() => _DateTimePickerState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DateTimePickerState extends State<DateTimePicker> {
|
||||||
|
late final DateTimePickerController _dateTimePickerController =
|
||||||
|
DateTimePickerController(
|
||||||
|
highlightToday: widget.highlightToday,
|
||||||
|
alwaysUse24HourFormat: widget.alwaysUse24HourFormat,
|
||||||
|
pickTime: widget.pickTime,
|
||||||
|
theme: widget.theme,
|
||||||
|
markedDates: widget.markedDates,
|
||||||
|
disabledDates: widget.disabledDates,
|
||||||
|
disabledTimes: widget.disabledTimes,
|
||||||
|
onTapDayCallBack: (date) {
|
||||||
|
widget.onTapDay?.call(date);
|
||||||
|
if (widget.closeOnSelectDate) {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
browsingDate: widget.initialDate ?? DateTime.now(),
|
||||||
|
selectedDate: widget.initialDate ?? DateTime.now(),
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
decoration: (widget.theme.shapeBorder == null)
|
||||||
|
? BoxDecoration(
|
||||||
|
color: widget.theme.backgroundColor,
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
blurRadius: 5,
|
||||||
|
color: Colors.black.withOpacity(0.25),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: ShapeDecoration(
|
||||||
|
shape: widget.theme.shapeBorder!,
|
||||||
|
color: widget.theme.backgroundColor,
|
||||||
|
shadows: [
|
||||||
|
BoxShadow(
|
||||||
|
blurRadius: 5,
|
||||||
|
color: Colors.black.withOpacity(0.25),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: SizedBox(
|
||||||
|
width: widget.size.width,
|
||||||
|
height: widget.size.height,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: OverlayDateTimeContent(
|
||||||
|
theme: widget.theme,
|
||||||
|
textStyle: widget.textStyle,
|
||||||
|
size: widget.size,
|
||||||
|
controller: _dateTimePickerController,
|
||||||
|
showWeekDays: true,
|
||||||
|
onNextDate: nextDate,
|
||||||
|
onPreviousDate: previousDate,
|
||||||
|
dateTimeConstraint: widget.dateTimeConstraint,
|
||||||
|
onNextPageButtonChild: widget.onNextPageButtonBuilder,
|
||||||
|
onPreviousPageButtonChild: widget.onPreviousPageButtonBuilder,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void nextDate() {
|
||||||
|
if (!mounted) return;
|
||||||
|
setState(() {
|
||||||
|
_dateTimePickerController.browsingDate = DateTime(
|
||||||
|
_dateTimePickerController.browsingDate.year,
|
||||||
|
_dateTimePickerController.browsingDate.month + 1,
|
||||||
|
_dateTimePickerController.browsingDate.day,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void previousDate() {
|
||||||
|
if (!mounted) return;
|
||||||
|
setState(() {
|
||||||
|
_dateTimePickerController.browsingDate = DateTime(
|
||||||
|
_dateTimePickerController.browsingDate.year,
|
||||||
|
_dateTimePickerController.browsingDate.month - 1,
|
||||||
|
_dateTimePickerController.browsingDate.day,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -111,11 +111,14 @@ class MonthDateTimePicker extends StatelessWidget {
|
||||||
dateTimePickerController.disabledTimes ??
|
dateTimePickerController.disabledTimes ??
|
||||||
[],
|
[],
|
||||||
)) {
|
)) {
|
||||||
showDialog(
|
if (context.mounted) {
|
||||||
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) =>
|
builder: (context) =>
|
||||||
dateTimePickerController
|
dateTimePickerController
|
||||||
.wrongTimeDialog!);
|
.wrongTimeDialog!,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,11 +58,13 @@ class WeekDateTimePicker extends StatelessWidget {
|
||||||
timeOfDay.containsAny(
|
timeOfDay.containsAny(
|
||||||
dateTimePickerController.disabledTimes ?? [],
|
dateTimePickerController.disabledTimes ?? [],
|
||||||
)) {
|
)) {
|
||||||
showDialog(
|
if (context.mounted) {
|
||||||
context: context,
|
showDialog(
|
||||||
builder: (context) =>
|
context: context,
|
||||||
dateTimePickerController.wrongTimeDialog!,
|
builder: (context) =>
|
||||||
);
|
dateTimePickerController.wrongTimeDialog!,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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: 2.2.4
|
version: 2.3.0
|
||||||
homepage: https://iconica.nl/
|
homepage: https://iconica.nl/
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
Loading…
Reference in a new issue