Skip to content

Commit a961141

Browse files
committed
Fix issue #4 - fixed the time display when period is 12h. Now it can differ correctly when time is AM or PM and show this information.
1 parent bbe79ce commit a961141

File tree

6 files changed

+68
-7
lines changed

6 files changed

+68
-7
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.2 - 2020-09-21
2+
3+
* Fix issue #4 - fixed the time display when period is 12h. Now it can differ correctly when time is AM or PM and show this information.
4+
15
## 1.0.1 - 2020-08-18
26

37
* Fix issue #2 - just reference in README.md

README.md

Lines changed: 1 addition & 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-
date_time_picker: "^1.0.1"
15+
date_time_picker: "^1.0.2"
1616
```
1717
1818
In your library add the following import:

example/lib/main.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class _MyHomePageState extends State<MyHomePage> {
9999
icon: Icon(Icons.event),
100100
dateLabelText: 'Date',
101101
timeLabelText: "Hour",
102+
//use24HourFormat: false,
102103
selectableDayPredicate: (date) {
103104
if (date.weekday == 6 || date.weekday == 7) {
104105
return false;
@@ -114,13 +115,14 @@ class _MyHomePageState extends State<MyHomePage> {
114115
),
115116
DateTimePicker(
116117
type: DateTimePickerType.dateTime,
117-
dateMask: 'd MMMM, yyyy - HH:mm',
118+
dateMask: 'd MMMM, yyyy - hh:mm a',
118119
controller: _controller2,
119120
//initialValue: _initialValue,
120121
firstDate: DateTime(2000),
121122
lastDate: DateTime(2100),
122123
//icon: Icon(Icons.event),
123124
dateLabelText: 'Date Time',
125+
use24HourFormat: false,
124126
onChanged: (val) => setState(() => _valueChanged2 = val),
125127
validator: (val) {
126128
setState(() => _valueToValidate2 = val);
@@ -150,6 +152,7 @@ class _MyHomePageState extends State<MyHomePage> {
150152
//initialValue: _initialValue,
151153
icon: Icon(Icons.access_time),
152154
timeLabelText: "Time",
155+
//use24HourFormat: false,
153156
onChanged: (val) => setState(() => _valueChanged4 = val),
154157
validator: (val) {
155158
setState(() => _valueToValidate4 = val);

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ dependencies:
2424
flutter:
2525
sdk: flutter
2626

27-
date_time_picker: ^1.0.1
27+
date_time_picker: ^1.0.2
2828

2929
# The following adds the Cupertino Icons font to your application.
3030
# Use with the CupertinoIcons class for iOS style icons.

lib/date_time_picker.dart

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ class _DateTimePickerState extends FormFieldState<String> {
521521
String _sValue;
522522
String _sDate = '';
523523
String _sTime = '';
524+
String _sPeriod = '';
524525

525526
@override
526527
DateTimePicker get widget => super.widget as DateTimePicker;
@@ -548,6 +549,10 @@ class _DateTimePickerState extends FormFieldState<String> {
548549
_sDate = DateFormat('yyyy-MM-dd').format(_dDate);
549550
_sTime = DateFormat('HH:mm').format(_dDate);
550551

552+
if (!widget.use24HourFormat) {
553+
_sTime = DateFormat('hh:mm a').format(_dDate);
554+
}
555+
551556
_timeLabelController.text = _sTime;
552557
_dateLabelController.text = _sDate;
553558

@@ -559,6 +564,10 @@ class _DateTimePickerState extends FormFieldState<String> {
559564

560565
if (widget.type == DateTimePickerType.dateTime && _sTime != '') {
561566
lsMask = 'MMM d, yyyy - HH:mm';
567+
568+
if (!widget.use24HourFormat) {
569+
lsMask = 'MMM d, yyyy - hh:mm a';
570+
}
562571
}
563572

564573
_dateLabelController.text = DateFormat(lsMask).format(_dDate);
@@ -568,7 +577,12 @@ class _DateTimePickerState extends FormFieldState<String> {
568577
_tTime =
569578
TimeOfDay(hour: int.parse(llTime[0]), minute: int.parse(llTime[1]));
570579
_sTime = lsValue;
571-
_timeLabelController.text = _sTime;
580+
581+
if (!widget.use24HourFormat) {
582+
_sPeriod = _tTime.period.index == 0 ? ' AM' : ' PM';
583+
}
584+
585+
_timeLabelController.text = _sTime + _sPeriod;
572586
}
573587
}
574588
}
@@ -610,6 +624,10 @@ class _DateTimePickerState extends FormFieldState<String> {
610624
if (lsOldTime != '') {
611625
_tTime = TimeOfDay.fromDateTime(_dDate);
612626
_sTime = DateFormat('HH:mm').format(_dDate);
627+
628+
if (!widget.use24HourFormat) {
629+
_sTime = DateFormat('hh:mm a').format(_dDate);
630+
}
613631
}
614632
}
615633

@@ -625,6 +643,10 @@ class _DateTimePickerState extends FormFieldState<String> {
625643

626644
if (widget.type == DateTimePickerType.dateTime && _sTime != '') {
627645
lsMask = 'MMM d, yyyy - HH:mm';
646+
647+
if (!widget.use24HourFormat) {
648+
lsMask = 'MMM d, yyyy - hh:mm a';
649+
}
628650
}
629651

630652
_dateLabelController.text = DateFormat(lsMask).format(_dDate);
@@ -635,7 +657,7 @@ class _DateTimePickerState extends FormFieldState<String> {
635657
_tTime = TimeOfDay(
636658
hour: int.parse(llTime[0]), minute: int.parse(llTime[1]));
637659
_sTime = lsValue;
638-
_timeLabelController.text = _sTime;
660+
_timeLabelController.text = _sTime + _sPeriod;
639661
}
640662
}
641663
}
@@ -740,6 +762,15 @@ class _DateTimePickerState extends FormFieldState<String> {
740762
if (ltTimePicked != null) {
741763
String lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
742764
String lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
765+
766+
if (ltTimePicked.period.index == 0 && lsHour == '12') {
767+
lsHour = '00';
768+
}
769+
770+
if (!widget.use24HourFormat) {
771+
_sPeriod = ltTimePicked.period.index == 0 ? ' AM' : ' PM';
772+
}
773+
743774
_sTime = '$lsHour:$lsMinute';
744775
_tTime = ltTimePicked;
745776

@@ -795,7 +826,8 @@ class _DateTimePickerState extends FormFieldState<String> {
795826
routeSettings: widget.routeSettings,
796827
builder: (BuildContext context, Widget child) {
797828
return MediaQuery(
798-
data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
829+
data: MediaQuery.of(context)
830+
.copyWith(alwaysUse24HourFormat: widget.use24HourFormat),
799831
child: child,
800832
);
801833
},
@@ -804,8 +836,30 @@ class _DateTimePickerState extends FormFieldState<String> {
804836
if (ltTimePicked != null) {
805837
String lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
806838
String lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
839+
840+
if (ltTimePicked.period.index == 0 && lsHour == '12') {
841+
lsHour = '00';
842+
}
843+
844+
if (!widget.use24HourFormat) {
845+
_sPeriod = ltTimePicked.period.index == 0 ? ' AM' : ' PM';
846+
}
847+
807848
_sTime = '$lsHour:$lsMinute';
808849
_tTime = ltTimePicked;
850+
} else {
851+
String lsHour = _tTime.hour.toString().padLeft(2, '0');
852+
String lsMinute = _tTime.minute.toString().padLeft(2, '0');
853+
854+
if (_tTime.period.index == 0 && lsHour == '12') {
855+
lsHour = '00';
856+
}
857+
858+
if (!widget.use24HourFormat) {
859+
_sPeriod = _tTime.period.index == 0 ? ' AM' : ' PM';
860+
}
861+
862+
_sTime = '$lsHour:$lsMinute';
809863
}
810864

811865
String lsOldValue = _sValue;

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.1
3+
version: 1.0.2
44
homepage: https://github.com/m3uzz/date_time_picker
55

66
environment:

0 commit comments

Comments
 (0)