Skip to content

Commit 824b4a1

Browse files
committed
Added a new parameter (timePickerEntryModeInput) to set timepicker mode, dial or input.
1 parent 7da37f7 commit 824b4a1

File tree

6 files changed

+56
-25
lines changed

6 files changed

+56
-25
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 2.1.0 - 2021-07-08
2+
3+
* Fixed 12h display format.
4+
* Fixed field cleaning.
5+
* Added a new parameter (timePickerEntryModeInput) to set timepicker mode, dial or input.
6+
17
## 2.0.0 - 2021-03-09
28

39
* Migrate to null safety.

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
[![pub package](https://img.shields.io/pub/v/date_time_picker.svg)](https://pub.dartlang.org/packages/date_time_picker)
44

5+
<a href="https://www.buymeacoffee.com/hslbetto" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Beer" style="width: 150px !important;"></a>
6+
57
A Flutter widget to show a text form field to display a date or clock dialog.\
68
This widget extend TextField and has a similar behavior as TextFormField
79

@@ -12,7 +14,7 @@ In the `pubspec.yaml` of your flutter project, add the following dependency:
1214
```yaml
1315
dependencies:
1416
...
15-
date_time_picker: "^2.0.0"
17+
date_time_picker: "^2.1.0"
1618
```
1719
1820
In your library add the following import:

example/lib/main.dart

+14-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class MyApp extends StatelessWidget {
1616
GlobalMaterialLocalizations.delegate,
1717
GlobalCupertinoLocalizations.delegate,
1818
],
19-
supportedLocales: [Locale('pt', 'BR')],
19+
supportedLocales: [Locale('en', 'US')], //, Locale('pt', 'BR')],
2020
);
2121
}
2222
}
@@ -35,7 +35,7 @@ class _MyHomePageState extends State<MyHomePage> {
3535
late TextEditingController _controller3;
3636
late TextEditingController _controller4;
3737

38-
//String _initialValue;
38+
//String _initialValue = '';
3939
String _valueChanged1 = '';
4040
String _valueToValidate1 = '';
4141
String _valueSaved1 = '';
@@ -136,14 +136,14 @@ class _MyHomePageState extends State<MyHomePage> {
136136
),
137137
DateTimePicker(
138138
type: DateTimePickerType.date,
139-
dateMask: 'yyyy/MM/dd',
139+
//dateMask: 'yyyy/MM/dd',
140140
controller: _controller3,
141141
//initialValue: _initialValue,
142142
firstDate: DateTime(2000),
143143
lastDate: DateTime(2100),
144144
icon: Icon(Icons.event),
145145
dateLabelText: 'Date',
146-
//locale: Locale('en', 'US'),
146+
locale: Locale('pt', 'BR'),
147147
onChanged: (val) => setState(() => _valueChanged3 = val),
148148
validator: (val) {
149149
setState(() => _valueToValidate3 = val ?? '');
@@ -153,12 +153,13 @@ class _MyHomePageState extends State<MyHomePage> {
153153
),
154154
DateTimePicker(
155155
type: DateTimePickerType.time,
156-
controller: _controller4,
157-
//initialValue: _initialValue,
156+
//timePickerEntryModeInput: true,
157+
//controller: _controller4,
158+
initialValue: '', //_initialValue,
158159
icon: Icon(Icons.access_time),
159160
timeLabelText: "Time",
160-
//use24HourFormat: false,
161-
//locale: Locale('en', 'US'),
161+
use24HourFormat: false,
162+
locale: Locale('pt', 'BR'),
162163
onChanged: (val) => setState(() => _valueChanged4 = val),
163164
validator: (val) {
164165
setState(() => _valueToValidate4 = val ?? '');
@@ -227,6 +228,11 @@ class _MyHomePageState extends State<MyHomePage> {
227228
_valueSaved3 = '';
228229
_valueSaved4 = '';
229230
});
231+
232+
_controller1.clear();
233+
_controller2.clear();
234+
_controller3.clear();
235+
_controller4.clear();
230236
},
231237
child: Text('Reset'),
232238
),

example/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ dependencies:
2828

2929
intl: ^0.17.0
3030

31-
date_time_picker: #^2.0.0
31+
date_time_picker: #^2.1.0
3232
path: ../
3333

3434
# The following adds the Cupertino Icons font to your application.

lib/date_time_picker.dart

+31-14
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ class DateTimePicker extends FormField<String> {
164164
this.routeSettings,
165165
this.use24HourFormat = true,
166166
this.timeFieldWidth,
167+
this.timePickerEntryModeInput = false,
167168
String? initialValue,
168169
FocusNode? focusNode,
169170
InputDecoration? decoration,
@@ -504,6 +505,8 @@ class DateTimePicker extends FormField<String> {
504505
/// The width for time text field when DateTimePickerType is dateTimeSeparated.
505506
final double? timeFieldWidth;
506507

508+
final bool timePickerEntryModeInput;
509+
507510
final ValueChanged<String>? onChanged;
508511

509512
@override
@@ -531,17 +534,22 @@ class _DateTimePickerState extends FormFieldState<String> {
531534
void initState() {
532535
super.initState();
533536

534-
_dDate = widget.initialDate ?? DateTime.now();
535-
_tTime = widget.initialTime ?? TimeOfDay.now();
536-
537537
if (widget.controller == null) {
538538
_stateController = TextEditingController(text: widget.initialValue);
539539
} else {
540540
widget.controller?.addListener(_handleControllerChanged);
541541
}
542542

543+
initValues();
544+
}
545+
546+
void initValues() {
547+
_dDate = widget.initialDate ?? DateTime.now();
548+
_tTime = widget.initialTime ?? TimeOfDay.now();
549+
543550
final lsValue = _effectiveController?.text.trim();
544551
final languageCode = widget.locale?.languageCode;
552+
545553
if (lsValue != null && lsValue != '' && lsValue != 'null') {
546554
if (widget.type != DateTimePickerType.time) {
547555
_dDate = DateTime.tryParse(lsValue) ?? DateTime.now();
@@ -591,8 +599,8 @@ class _DateTimePickerState extends FormFieldState<String> {
591599
@override
592600
void didUpdateWidget(DateTimePicker oldWidget) {
593601
super.didUpdateWidget(oldWidget);
594-
595602
final languageCode = widget.locale?.languageCode;
603+
596604
if (widget.controller != oldWidget.controller) {
597605
oldWidget.controller?.removeListener(_handleControllerChanged);
598606
widget.controller?.addListener(_handleControllerChanged);
@@ -660,9 +668,11 @@ class _DateTimePickerState extends FormFieldState<String> {
660668
_timeLabelController.text = _sTime + _sPeriod;
661669
}
662670
}
663-
}else{
671+
} else {
664672
_dateLabelController.clear();
665673
_timeLabelController.clear();
674+
675+
initValues();
666676
}
667677
}
668678

@@ -746,20 +756,24 @@ class _DateTimePickerState extends FormFieldState<String> {
746756
}
747757
}
748758

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+
755766
_sTime = '$lsHour:$lsMinute';
756-
_sPeriod = ltTimePicked.period.index == 0 ? ' AM' : ' PM';
767+
_sPeriod = ptTimePicked.period.index == 0 ? ' AM' : ' PM';
757768
}
758769

759770
Future<void> _showTimePickerDialog() async {
760771
final ltTimePicked = await showTimePicker(
761772
context: context,
762773
initialTime: _tTime,
774+
initialEntryMode: widget.timePickerEntryModeInput
775+
? TimePickerEntryMode.input
776+
: TimePickerEntryMode.dial,
763777
useRootNavigator: widget.useRootNavigator,
764778
routeSettings: widget.routeSettings,
765779
builder: (BuildContext context, Widget? child) {
@@ -772,7 +786,7 @@ class _DateTimePickerState extends FormFieldState<String> {
772786
);
773787

774788
if (ltTimePicked != null) {
775-
var lsHour = ltTimePicked.minute.toString().padLeft(2, '0');
789+
var lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
776790
var lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
777791

778792
if (ltTimePicked.period.index == 0 && lsHour == '12') {
@@ -836,6 +850,9 @@ class _DateTimePickerState extends FormFieldState<String> {
836850
final ltTimePicked = await showTimePicker(
837851
context: context,
838852
initialTime: _tTime,
853+
initialEntryMode: widget.timePickerEntryModeInput
854+
? TimePickerEntryMode.input
855+
: TimePickerEntryMode.dial,
839856
useRootNavigator: widget.useRootNavigator,
840857
routeSettings: widget.routeSettings,
841858
builder: (BuildContext context, Widget? child) {
@@ -849,7 +866,7 @@ class _DateTimePickerState extends FormFieldState<String> {
849866

850867
if (ltTimePicked != null) {
851868
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');
853870

854871
if (ltTimePicked.period.index == 0 && lsHour == '12') {
855872
lsHour = '00';

pubspec.yaml

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

66
environment:

0 commit comments

Comments
 (0)