@@ -164,6 +164,7 @@ class DateTimePicker extends FormField<String> {
164
164
this .routeSettings,
165
165
this .use24HourFormat = true ,
166
166
this .timeFieldWidth,
167
+ this .timePickerEntryModeInput = false ,
167
168
String ? initialValue,
168
169
FocusNode ? focusNode,
169
170
InputDecoration ? decoration,
@@ -504,6 +505,8 @@ class DateTimePicker extends FormField<String> {
504
505
/// The width for time text field when DateTimePickerType is dateTimeSeparated.
505
506
final double ? timeFieldWidth;
506
507
508
+ final bool timePickerEntryModeInput;
509
+
507
510
final ValueChanged <String >? onChanged;
508
511
509
512
@override
@@ -531,17 +534,22 @@ class _DateTimePickerState extends FormFieldState<String> {
531
534
void initState () {
532
535
super .initState ();
533
536
534
- _dDate = widget.initialDate ?? DateTime .now ();
535
- _tTime = widget.initialTime ?? TimeOfDay .now ();
536
-
537
537
if (widget.controller == null ) {
538
538
_stateController = TextEditingController (text: widget.initialValue);
539
539
} else {
540
540
widget.controller? .addListener (_handleControllerChanged);
541
541
}
542
542
543
+ initValues ();
544
+ }
545
+
546
+ void initValues () {
547
+ _dDate = widget.initialDate ?? DateTime .now ();
548
+ _tTime = widget.initialTime ?? TimeOfDay .now ();
549
+
543
550
final lsValue = _effectiveController? .text.trim ();
544
551
final languageCode = widget.locale? .languageCode;
552
+
545
553
if (lsValue != null && lsValue != '' && lsValue != 'null' ) {
546
554
if (widget.type != DateTimePickerType .time) {
547
555
_dDate = DateTime .tryParse (lsValue) ?? DateTime .now ();
@@ -591,8 +599,8 @@ class _DateTimePickerState extends FormFieldState<String> {
591
599
@override
592
600
void didUpdateWidget (DateTimePicker oldWidget) {
593
601
super .didUpdateWidget (oldWidget);
594
-
595
602
final languageCode = widget.locale? .languageCode;
603
+
596
604
if (widget.controller != oldWidget.controller) {
597
605
oldWidget.controller? .removeListener (_handleControllerChanged);
598
606
widget.controller? .addListener (_handleControllerChanged);
@@ -660,9 +668,11 @@ class _DateTimePickerState extends FormFieldState<String> {
660
668
_timeLabelController.text = _sTime + _sPeriod;
661
669
}
662
670
}
663
- }else {
671
+ } else {
664
672
_dateLabelController.clear ();
665
673
_timeLabelController.clear ();
674
+
675
+ initValues ();
666
676
}
667
677
}
668
678
@@ -746,20 +756,24 @@ class _DateTimePickerState extends FormFieldState<String> {
746
756
}
747
757
}
748
758
749
- void set12HourTimeValues (final TimeOfDay ltTimePicked) {
750
- final now = DateTime .now ();
751
- final time = DateTime (
752
- now.year, now.month, now.day, ltTimePicked.hour, ltTimePicked.minute);
753
- final lsHour = DateFormat ("hh" , widget.locale.toString ()).format (time);
754
- final lsMinute = DateFormat ("mm" , widget.locale.toString ()).format (time);
759
+ void set12HourTimeValues (final TimeOfDay ptTimePicked) {
760
+ final ldNow = DateTime .now ();
761
+ final ldTime = DateTime (ldNow.year, ldNow.month, ldNow.day,
762
+ ptTimePicked.hour, ptTimePicked.minute);
763
+ final lsHour = DateFormat ("hh" , widget.locale.toString ()).format (ldTime);
764
+ final lsMinute = DateFormat ("mm" , widget.locale.toString ()).format (ldTime);
765
+
755
766
_sTime = '$lsHour :$lsMinute ' ;
756
- _sPeriod = ltTimePicked .period.index == 0 ? ' AM' : ' PM' ;
767
+ _sPeriod = ptTimePicked .period.index == 0 ? ' AM' : ' PM' ;
757
768
}
758
769
759
770
Future <void > _showTimePickerDialog () async {
760
771
final ltTimePicked = await showTimePicker (
761
772
context: context,
762
773
initialTime: _tTime,
774
+ initialEntryMode: widget.timePickerEntryModeInput
775
+ ? TimePickerEntryMode .input
776
+ : TimePickerEntryMode .dial,
763
777
useRootNavigator: widget.useRootNavigator,
764
778
routeSettings: widget.routeSettings,
765
779
builder: (BuildContext context, Widget ? child) {
@@ -772,7 +786,7 @@ class _DateTimePickerState extends FormFieldState<String> {
772
786
);
773
787
774
788
if (ltTimePicked != null ) {
775
- var lsHour = ltTimePicked.minute .toString ().padLeft (2 , '0' );
789
+ var lsHour = ltTimePicked.hour .toString ().padLeft (2 , '0' );
776
790
var lsMinute = ltTimePicked.minute.toString ().padLeft (2 , '0' );
777
791
778
792
if (ltTimePicked.period.index == 0 && lsHour == '12' ) {
@@ -836,6 +850,9 @@ class _DateTimePickerState extends FormFieldState<String> {
836
850
final ltTimePicked = await showTimePicker (
837
851
context: context,
838
852
initialTime: _tTime,
853
+ initialEntryMode: widget.timePickerEntryModeInput
854
+ ? TimePickerEntryMode .input
855
+ : TimePickerEntryMode .dial,
839
856
useRootNavigator: widget.useRootNavigator,
840
857
routeSettings: widget.routeSettings,
841
858
builder: (BuildContext context, Widget ? child) {
@@ -849,7 +866,7 @@ class _DateTimePickerState extends FormFieldState<String> {
849
866
850
867
if (ltTimePicked != null ) {
851
868
var lsHour = ltTimePicked.hour.toString ().padLeft (2 , '0' );
852
- final lsMinute = ltTimePicked.minute.toString ().padLeft (2 , '0' );
869
+ var lsMinute = ltTimePicked.minute.toString ().padLeft (2 , '0' );
853
870
854
871
if (ltTimePicked.period.index == 0 && lsHour == '12' ) {
855
872
lsHour = '00' ;
0 commit comments