Skip to content

Commit bbe79ce

Browse files
committed
* Fix issue #2 - just reference in README.md
* Fix issue #3 - filling the time field when press Ok button on time picker dialog without select a specific time, getting the current time showed. * Fix problems when initialValue is empty
1 parent 545341c commit bbe79ce

File tree

5 files changed

+76
-40
lines changed

5 files changed

+76
-40
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.0.1 - 2020-08-18
2+
3+
* Fix issue #2 - just reference in README.md
4+
* Fix issue #3 - filling the time field when press Ok button on time picker dialog without select a specific time, getting the current time showed.
5+
* Fix problems when initialValue is empty
6+
17
## 1.0.0 - 2020-07-22
28

39
* Initial Open Source release.

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ In the `pubspec.yaml` of your flutter project, add the following dependency:
1212
```yaml
1313
dependencies:
1414
...
15-
icon_picker: "^1.0.0"
15+
date_time_picker: "^1.0.1"
1616
```
1717
1818
In your library add the following import:
@@ -38,6 +38,8 @@ DateTimePicker(
3838
)
3939
```
4040

41+
initialValue or controller.text can be `null`, `empty` or a `DateTime string` otherwise it will throw an error.
42+
4143
``` dart
4244
DateTimePicker(
4345
initialValue: '',

example/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ dependencies:
2424
flutter:
2525
sdk: flutter
2626

27-
date_time_picker: ^1.0.0
28-
29-
# The following adds the Cupertino Icons font to your application.
27+
date_time_picker: ^1.0.1
28+
29+
# The following adds the Cupertino Icons font to your application.
3030
# Use with the CupertinoIcons class for iOS style icons.
3131
cupertino_icons: ^0.1.3
3232

lib/date_time_picker.dart

Lines changed: 63 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ class DateTimePicker extends FormField<String> {
375375
///
376376
/// If null, this widget will create its own [TextEditingController] and
377377
/// initialize its [TextEditingController.text] with [initialValue].
378+
/// The value need to be a DateTime String or null
378379
final TextEditingController controller;
379380

380381
/// The earliest allowable [DateTime] that the user can select.
@@ -519,7 +520,7 @@ class _DateTimePickerState extends FormFieldState<String> {
519520
TimeOfDay _tTime = TimeOfDay.now();
520521
String _sValue;
521522
String _sDate = '';
522-
String _sTime = '00:00';
523+
String _sTime = '';
523524

524525
@override
525526
DateTimePicker get widget => super.widget as DateTimePicker;
@@ -537,7 +538,7 @@ class _DateTimePickerState extends FormFieldState<String> {
537538
widget.controller.addListener(_handleControllerChanged);
538539
}
539540

540-
String lsValue = _effectiveController.text;
541+
String lsValue = _effectiveController.text.trim();
541542

542543
if (lsValue != null && lsValue != '' && lsValue != 'null') {
543544
if (widget.type != DateTimePickerType.time) {
@@ -554,9 +555,12 @@ class _DateTimePickerState extends FormFieldState<String> {
554555
_dateLabelController.text =
555556
DateFormat(widget.dateMask).format(_dDate);
556557
} else {
557-
String lsMask = widget.type == DateTimePickerType.dateTime
558-
? 'MMM d, yyyy - HH:mm'
559-
: 'MMM d, yyyy';
558+
String lsMask = 'MMM d, yyyy';
559+
560+
if (widget.type == DateTimePickerType.dateTime && _sTime != '') {
561+
lsMask = 'MMM d, yyyy - HH:mm';
562+
}
563+
560564
_dateLabelController.text = DateFormat(lsMask).format(_dDate);
561565
}
562566
} else {
@@ -592,27 +596,39 @@ class _DateTimePickerState extends FormFieldState<String> {
592596
}
593597

594598
if (_effectiveController.text != null && _effectiveController.text != '') {
595-
String lsValue = _effectiveController.text;
599+
String lsValue = _effectiveController.text.trim();
596600

597601
if (lsValue != null && lsValue != '' && lsValue != 'null') {
598602
if (widget.type != DateTimePickerType.time) {
603+
String lsOldDate = _sDate;
604+
String lsOldTime = _sTime;
599605
_dDate = DateTime.tryParse(lsValue);
600-
_tTime = TimeOfDay.fromDateTime(_dDate);
601606

602-
_sDate = DateFormat('yyyy-MM-dd').format(_dDate);
603-
_sTime = DateFormat('HH:mm').format(_dDate);
607+
if (_dDate != null) {
608+
_sDate = DateFormat('yyyy-MM-dd').format(_dDate);
604609

605-
_timeLabelController.text = _sTime;
606-
_dateLabelController.text = _sDate;
607-
608-
if (widget.dateMask != null && widget.dateMask != '') {
609-
_dateLabelController.text =
610-
DateFormat(widget.dateMask).format(_dDate);
611-
} else {
612-
String lsMask = widget.type == DateTimePickerType.dateTime
613-
? 'MMM d, yyyy - HH:mm'
614-
: 'MMM d, yyyy';
615-
_dateLabelController.text = DateFormat(lsMask).format(_dDate);
610+
if (lsOldTime != '') {
611+
_tTime = TimeOfDay.fromDateTime(_dDate);
612+
_sTime = DateFormat('HH:mm').format(_dDate);
613+
}
614+
}
615+
616+
_dateLabelController.text = lsOldDate != '' ? _sDate : '';
617+
_timeLabelController.text = lsOldTime != '' ? _sTime : '';
618+
619+
if (_dDate != null) {
620+
if (widget.dateMask != null && widget.dateMask != '') {
621+
_dateLabelController.text =
622+
DateFormat(widget.dateMask).format(_dDate);
623+
} else {
624+
String lsMask = 'MMM d, yyyy';
625+
626+
if (widget.type == DateTimePickerType.dateTime && _sTime != '') {
627+
lsMask = 'MMM d, yyyy - HH:mm';
628+
}
629+
630+
_dateLabelController.text = DateFormat(lsMask).format(_dDate);
631+
}
616632
}
617633
} else {
618634
List<String> llTime = lsValue.split(':');
@@ -658,7 +674,7 @@ class _DateTimePickerState extends FormFieldState<String> {
658674
Future<void> _showDatePickerDialog() async {
659675
DateTime ldDatePicked = await showDatePicker(
660676
context: context,
661-
initialDate: _dDate,
677+
initialDate: _dDate ?? DateTime.now(),
662678
firstDate: widget.firstDate,
663679
lastDate: widget.lastDate,
664680
helpText: widget.calendarTitle,
@@ -677,9 +693,10 @@ class _DateTimePickerState extends FormFieldState<String> {
677693
routeSettings: widget.routeSettings,
678694
);
679695

680-
if (ldDatePicked != null && ldDatePicked != _dDate) {
696+
if (ldDatePicked != null) {
681697
_sDate = DateFormat('yyyy-MM-dd').format(ldDatePicked);
682698
_dDate = ldDatePicked;
699+
String lsOldValue = _sValue;
683700
_sValue = _sDate;
684701
String lsFormatedDate;
685702

@@ -691,21 +708,24 @@ class _DateTimePickerState extends FormFieldState<String> {
691708
DateFormat('MMM dd, yyyy').format(DateTime.tryParse(_sDate));
692709
}
693710

694-
if (widget.type == DateTimePickerType.dateTimeSeparate) {
711+
if (widget.type == DateTimePickerType.dateTimeSeparate && _sTime != '') {
695712
_sValue = '$_sDate $_sTime';
696713
}
697714

715+
_sValue = _sValue.trim();
698716
_dateLabelController.text = lsFormatedDate;
699717
_effectiveController.text = _sValue;
700718

701-
onChangedHandler(_sValue);
719+
if (_sValue != lsOldValue) {
720+
onChangedHandler(_sValue);
721+
}
702722
}
703723
}
704724

705725
Future<void> _showTimePickerDialog() async {
706726
TimeOfDay ltTimePicked = await showTimePicker(
707727
context: context,
708-
initialTime: _tTime,
728+
initialTime: _tTime ?? TimeOfDay.now(),
709729
useRootNavigator: widget.useRootNavigator ?? false,
710730
routeSettings: widget.routeSettings,
711731
builder: (BuildContext context, Widget child) {
@@ -717,22 +737,26 @@ class _DateTimePickerState extends FormFieldState<String> {
717737
},
718738
);
719739

720-
if (ltTimePicked != null && ltTimePicked != _tTime) {
740+
if (ltTimePicked != null) {
721741
String lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
722742
String lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
723743
_sTime = '$lsHour:$lsMinute';
724744
_tTime = ltTimePicked;
725745

726746
_timeLabelController.text = _sTime;
747+
String lsOldValue = _sValue;
727748
_sValue = _sTime;
728749

729-
if (widget.type == DateTimePickerType.dateTimeSeparate) {
750+
if (widget.type == DateTimePickerType.dateTimeSeparate && _sDate != '') {
730751
_sValue = '$_sDate $_sTime';
731752
}
732753

754+
_sValue = _sValue.trim();
733755
_effectiveController.text = _sValue;
734756

735-
onChangedHandler(_sValue);
757+
if (_sValue != lsOldValue) {
758+
onChangedHandler(_sValue);
759+
}
736760
}
737761
}
738762

@@ -741,7 +765,7 @@ class _DateTimePickerState extends FormFieldState<String> {
741765

742766
DateTime ldDatePicked = await showDatePicker(
743767
context: context,
744-
initialDate: _dDate,
768+
initialDate: _dDate ?? DateTime.now(),
745769
firstDate: widget.firstDate,
746770
lastDate: widget.lastDate,
747771
helpText: widget.calendarTitle,
@@ -760,13 +784,13 @@ class _DateTimePickerState extends FormFieldState<String> {
760784
routeSettings: widget.routeSettings,
761785
);
762786

763-
if (ldDatePicked != null && ldDatePicked != _dDate) {
787+
if (ldDatePicked != null) {
764788
_sDate = DateFormat('yyyy-MM-dd').format(ldDatePicked);
765789
_dDate = ldDatePicked;
766790

767791
TimeOfDay ltTimePicked = await showTimePicker(
768792
context: context,
769-
initialTime: _tTime,
793+
initialTime: _tTime ?? TimeOfDay.now(),
770794
useRootNavigator: widget.useRootNavigator ?? false,
771795
routeSettings: widget.routeSettings,
772796
builder: (BuildContext context, Widget child) {
@@ -777,27 +801,31 @@ class _DateTimePickerState extends FormFieldState<String> {
777801
},
778802
);
779803

780-
if (ltTimePicked != null && ltTimePicked != _tTime) {
804+
if (ltTimePicked != null) {
781805
String lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
782806
String lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
783807
_sTime = '$lsHour:$lsMinute';
784808
_tTime = ltTimePicked;
785809
}
786810

811+
String lsOldValue = _sValue;
787812
_sValue = '$_sDate $_sTime';
813+
_sValue = _sValue.trim();
788814

789815
if (widget.dateMask != null && widget.dateMask != '') {
790816
lsFormatedDate =
791817
DateFormat(widget.dateMask).format(DateTime.tryParse(_sValue));
792818
} else {
793-
lsFormatedDate = DateFormat('MMM dd, yyyy - HH:mm')
794-
.format(DateTime.tryParse(_sValue));
819+
String lsMask = _sTime != '' ? 'MMM dd, yyyy - HH:mm' : 'MMM dd, yyyy';
820+
lsFormatedDate = DateFormat(lsMask).format(DateTime.tryParse(_sValue));
795821
}
796822

797823
_dateLabelController.text = lsFormatedDate;
798824
_effectiveController.text = _sValue;
799825

800-
onChangedHandler(_sValue);
826+
if (_sValue != lsOldValue) {
827+
onChangedHandler(_sValue);
828+
}
801829
}
802830
}
803831
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: date_time_picker
22
description: A Flutter widget to display a date time form field to show a date or clock dialog.
3-
version: 1.0.0
3+
version: 1.0.1
44
homepage: https://github.com/m3uzz/date_time_picker
55

66
environment:

0 commit comments

Comments
 (0)