From 4414bb4b78081dd2a3ecac8bc84be42d1119038a Mon Sep 17 00:00:00 2001 From: sxtfv Date: Thu, 15 Jul 2021 18:22:35 +1000 Subject: [PATCH 1/2] fix inconsistent time format --- lib/date_time_picker.dart | 67 +++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/lib/date_time_picker.dart b/lib/date_time_picker.dart index 0ea0dfc..1a677af 100644 --- a/lib/date_time_picker.dart +++ b/lib/date_time_picker.dart @@ -4,6 +4,8 @@ library date_time_picker; +import 'dart:core'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:intl/intl.dart'; @@ -582,20 +584,53 @@ class _DateTimePickerState extends FormFieldState { DateFormat(lsMask, languageCode).format(_dDate); } } else { - final llTime = lsValue.split(':'); - _tTime = - TimeOfDay(hour: int.parse(llTime[0]), minute: int.parse(llTime[1])); + final llTime = lsValue.split(RegExp(r'[:, \s]')); + if (llTime.length == 3) { + // if case when string in hh:mm a format + _tTime = _getTimeOfDay12HrsFormat( + llTime[0], + llTime[1], + llTime[2], + ); + } else { + // when format is HH:mm + _tTime = TimeOfDay( + hour: int.parse(llTime[0]), + minute: int.parse(llTime[1]), + ); + } + _sTime = lsValue; if (!widget.use24HourFormat) { - _sPeriod = _tTime.period.index == 0 ? ' AM' : ' PM'; + set12HourTimeValues(_tTime); } + _effectiveController?.text = _sTime + _sPeriod; + _timeLabelController.text = _sTime + _sPeriod; } } } + TimeOfDay _getTimeOfDay12HrsFormat( + String hourStr, + String minuteStr, + String periodStr, + ) { + var hour = int.parse(hourStr); + if (periodStr == 'PM') { + hour = hour == 12 ? 12 : hour + 12; + } + if (periodStr == 'AM' && hour == 12) { + hour = 0; + } + + final minute = int.parse(minuteStr); + + return TimeOfDay(hour: hour, minute: minute); + } + @override void didUpdateWidget(DateTimePicker oldWidget) { super.didUpdateWidget(oldWidget); @@ -661,10 +696,22 @@ class _DateTimePickerState extends FormFieldState { DateFormat(lsMask, languageCode).format(_dDate); } } else { - final llTime = lsValue.split(':'); - _tTime = TimeOfDay( - hour: int.parse(llTime[0]), minute: int.parse(llTime[1])); - _sTime = lsValue; + final llTime = lsValue.split(RegExp(r'[:, \s]')); + if (llTime.length == 3) { + // in case when string in hh:mm a format + _tTime = _getTimeOfDay12HrsFormat( + llTime[0], + llTime[1], + llTime[2], + ); + } else { + // when format is HH:mm + _tTime = TimeOfDay( + hour: int.parse(llTime[0]), + minute: int.parse(llTime[1]), + ); + } + _sTime = '${llTime[0]}:${llTime[1]}'; _timeLabelController.text = _sTime + _sPeriod; } } @@ -801,7 +848,7 @@ class _DateTimePickerState extends FormFieldState { _tTime = ltTimePicked; - _timeLabelController.text = _sTime; + _timeLabelController.text = _sTime + _sPeriod; final lsOldValue = _sValue; _sValue = _sTime; @@ -810,7 +857,7 @@ class _DateTimePickerState extends FormFieldState { } _sValue = _sValue.trim(); - _effectiveController?.text = _sValue; + _effectiveController?.text = _sValue + _sPeriod; if (_sValue != lsOldValue) { onChangedHandler(_sValue); From 4f4bc3548d3f41e56b4e85da6a876ec368eb27d4 Mon Sep 17 00:00:00 2001 From: sxtfv Date: Mon, 19 Jul 2021 18:41:16 +1000 Subject: [PATCH 2/2] fix onChanged no time period in 12 hr format --- lib/date_time_picker.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/date_time_picker.dart b/lib/date_time_picker.dart index 1a677af..d474fee 100644 --- a/lib/date_time_picker.dart +++ b/lib/date_time_picker.dart @@ -850,14 +850,14 @@ class _DateTimePickerState extends FormFieldState { _timeLabelController.text = _sTime + _sPeriod; final lsOldValue = _sValue; - _sValue = _sTime; + _sValue = _sTime + _sPeriod; if (widget.type == DateTimePickerType.dateTimeSeparate && _sDate != '') { - _sValue = '$_sDate $_sTime'; + _sValue = '$_sDate $_sTime $_sPeriod'; } _sValue = _sValue.trim(); - _effectiveController?.text = _sValue + _sPeriod; + _effectiveController?.text = _sValue; if (_sValue != lsOldValue) { onChangedHandler(_sValue);