Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix inconsistent time format #42

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

sxtfv
Copy link

@sxtfv sxtfv commented Jul 15, 2021

This PR fixes inconsistent time formats when use DateTimePickerType.time with 12 hour format. In current version, inputs will show time in format HH;mm a until you edit it manually.
So, when you use widget like this:

late TextEditingController _timeController;
...
final now = DateTime(2021, 07, 15, 13, 0, 0);
final hours = DateFormat('HH').format(now);
final minutes = DateFormat('mm').format(now);
_timeController = TextEditingController(text: '$hours:$minutes');
...
DateTimePicker(
    type: DateTimePickerType.time,
    controller: _timeController,
    firstDate: DateTime(2000),
    lastDate: DateTime(2100),
    use24HourFormat: false,
    locale: Locale('en', 'US'),
    decoration: InputDecoration(
        border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(4),
            borderSide: BorderSide(
                width: 2.0,
                color: Colors.black,
            ),
        ),
        floatingLabelBehavior: FloatingLabelBehavior.always,
        labelText: 'Time',
        suffixIcon: Icon(Icons.access_time),
    ),
),

It will be shown like this when screen loaded
image
when you pick another time and click 'OK' label will be shown like this:
image
Also, when you use controller with current plugin version - it's text may be different based on - did you select another time or not. That's why I call _effectiveController?.text = _sTime + _sPeriod; in initValues()
Also, it will throw an exception when you try to pass a controller like this:

final now = DateTime(2021, 07, 15, 13, 0, 0);
final hours = DateFormat('hh').format(now);
final minutes = DateFormat('mm').format(now);
_timeController = TextEditingController(text: '$hours:$minutes PM');

this PR fixes it as well

@iesmail-znz
Copy link

iesmail-znz commented Jul 15, 2021

I applied your fix and I can now see the AM and PM on the UI when I choose time. However, the value in onchanged or onsaved is captured without AM or PM. Here's my code:

DateTimePicker(
                             type: DateTimePickerType.time,
                             use24HourFormat: false,
                             locale: Locale('en', 'US'),
                             icon: Icon(Icons.access_time),
                             decoration: InputDecoration(
                             border: OutlineInputBorder(
                                 borderRadius: BorderRadius.circular(4),
                                 borderSide: BorderSide(
                                     width: 4.0,
                                     color: Colors.black,
                                 ),
                             ),
                              floatingLabelBehavior: FloatingLabelBehavior.always,
                             labelText: 'Opening Time',
                             suffixIcon: Icon(Icons.access_time),
                         ),
                             
                             onChanged: (val) => storeTiming.startTime = val,
                             validator: (val) {
                               print(val);
                               return null;
                             },
                             onSaved: (val) => storeTiming.startTime = val,
                           ),

@sxtfv
Copy link
Author

sxtfv commented Jul 16, 2021

@iesmail-znz Thanks for checking, I'll take a look. Could you please try to pass a controller as I shown in my example and check it's text? Sure that it works this way

@sxtfv
Copy link
Author

sxtfv commented Jul 19, 2021

@iesmail-znz I've pushed a fix and checked with your configuration - looks good now. Could you please confirm?

@lozdan
Copy link

lozdan commented Sep 18, 2021

I'm having the same problem @iesmail-znz has with the onChanged and onSaved. Is this gonna be merge/fix any time soon?

@divyanshu2345
Copy link

I'm trying to print AM PM in console or inside a string but i can only be able to get the time but without AM PM, but in the ui i can able to see AM PM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants