diff --git a/CHANGELOG.md b/CHANGELOG.md
index 144f7eb..1198d71 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 2.1.0 - 2021-07-08
+
+* Fixed 12h display format.
+* Fixed field cleaning.
+* Added a new parameter (timePickerEntryModeInput) to set timepicker mode, dial or input.
+
## 2.0.0 - 2021-03-09
* Migrate to null safety.
diff --git a/README.md b/README.md
index 751b7ae..963a5b3 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
[](https://pub.dartlang.org/packages/date_time_picker)
+
+
A Flutter widget to show a text form field to display a date or clock dialog.\
This widget extend TextField and has a similar behavior as TextFormField
@@ -12,7 +14,7 @@ In the `pubspec.yaml` of your flutter project, add the following dependency:
```yaml
dependencies:
...
- date_time_picker: "^2.0.0"
+ date_time_picker: "^2.1.0"
```
In your library add the following import:
diff --git a/example/lib/main.dart b/example/lib/main.dart
index 60f92a6..2ceeedb 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -16,7 +16,7 @@ class MyApp extends StatelessWidget {
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
- supportedLocales: [Locale('pt', 'BR')],
+ supportedLocales: [Locale('en', 'US')], //, Locale('pt', 'BR')],
);
}
}
@@ -35,7 +35,7 @@ class _MyHomePageState extends State {
late TextEditingController _controller3;
late TextEditingController _controller4;
- //String _initialValue;
+ //String _initialValue = '';
String _valueChanged1 = '';
String _valueToValidate1 = '';
String _valueSaved1 = '';
@@ -136,14 +136,14 @@ class _MyHomePageState extends State {
),
DateTimePicker(
type: DateTimePickerType.date,
- dateMask: 'yyyy/MM/dd',
+ //dateMask: 'yyyy/MM/dd',
controller: _controller3,
//initialValue: _initialValue,
firstDate: DateTime(2000),
lastDate: DateTime(2100),
icon: Icon(Icons.event),
dateLabelText: 'Date',
- //locale: Locale('en', 'US'),
+ locale: Locale('pt', 'BR'),
onChanged: (val) => setState(() => _valueChanged3 = val),
validator: (val) {
setState(() => _valueToValidate3 = val ?? '');
@@ -153,12 +153,13 @@ class _MyHomePageState extends State {
),
DateTimePicker(
type: DateTimePickerType.time,
- controller: _controller4,
- //initialValue: _initialValue,
+ //timePickerEntryModeInput: true,
+ //controller: _controller4,
+ initialValue: '', //_initialValue,
icon: Icon(Icons.access_time),
timeLabelText: "Time",
- //use24HourFormat: false,
- //locale: Locale('en', 'US'),
+ use24HourFormat: false,
+ locale: Locale('pt', 'BR'),
onChanged: (val) => setState(() => _valueChanged4 = val),
validator: (val) {
setState(() => _valueToValidate4 = val ?? '');
@@ -227,6 +228,11 @@ class _MyHomePageState extends State {
_valueSaved3 = '';
_valueSaved4 = '';
});
+
+ _controller1.clear();
+ _controller2.clear();
+ _controller3.clear();
+ _controller4.clear();
},
child: Text('Reset'),
),
diff --git a/example/pubspec.yaml b/example/pubspec.yaml
index 4e2cb41..0dfe731 100644
--- a/example/pubspec.yaml
+++ b/example/pubspec.yaml
@@ -28,7 +28,7 @@ dependencies:
intl: ^0.17.0
- date_time_picker: #^2.0.0
+ date_time_picker: #^2.1.0
path: ../
# The following adds the Cupertino Icons font to your application.
diff --git a/lib/date_time_picker.dart b/lib/date_time_picker.dart
index 2f2be50..0ea0dfc 100644
--- a/lib/date_time_picker.dart
+++ b/lib/date_time_picker.dart
@@ -164,6 +164,7 @@ class DateTimePicker extends FormField {
this.routeSettings,
this.use24HourFormat = true,
this.timeFieldWidth,
+ this.timePickerEntryModeInput = false,
String? initialValue,
FocusNode? focusNode,
InputDecoration? decoration,
@@ -504,6 +505,8 @@ class DateTimePicker extends FormField {
/// The width for time text field when DateTimePickerType is dateTimeSeparated.
final double? timeFieldWidth;
+ final bool timePickerEntryModeInput;
+
final ValueChanged? onChanged;
@override
@@ -531,17 +534,22 @@ class _DateTimePickerState extends FormFieldState {
void initState() {
super.initState();
- _dDate = widget.initialDate ?? DateTime.now();
- _tTime = widget.initialTime ?? TimeOfDay.now();
-
if (widget.controller == null) {
_stateController = TextEditingController(text: widget.initialValue);
} else {
widget.controller?.addListener(_handleControllerChanged);
}
+ initValues();
+ }
+
+ void initValues() {
+ _dDate = widget.initialDate ?? DateTime.now();
+ _tTime = widget.initialTime ?? TimeOfDay.now();
+
final lsValue = _effectiveController?.text.trim();
final languageCode = widget.locale?.languageCode;
+
if (lsValue != null && lsValue != '' && lsValue != 'null') {
if (widget.type != DateTimePickerType.time) {
_dDate = DateTime.tryParse(lsValue) ?? DateTime.now();
@@ -591,8 +599,8 @@ class _DateTimePickerState extends FormFieldState {
@override
void didUpdateWidget(DateTimePicker oldWidget) {
super.didUpdateWidget(oldWidget);
-
final languageCode = widget.locale?.languageCode;
+
if (widget.controller != oldWidget.controller) {
oldWidget.controller?.removeListener(_handleControllerChanged);
widget.controller?.addListener(_handleControllerChanged);
@@ -660,9 +668,11 @@ class _DateTimePickerState extends FormFieldState {
_timeLabelController.text = _sTime + _sPeriod;
}
}
- }else{
+ } else {
_dateLabelController.clear();
_timeLabelController.clear();
+
+ initValues();
}
}
@@ -746,20 +756,24 @@ class _DateTimePickerState extends FormFieldState {
}
}
- void set12HourTimeValues(final TimeOfDay ltTimePicked) {
- final now = DateTime.now();
- final time = DateTime(
- now.year, now.month, now.day, ltTimePicked.hour, ltTimePicked.minute);
- final lsHour = DateFormat("hh", widget.locale.toString()).format(time);
- final lsMinute = DateFormat("mm", widget.locale.toString()).format(time);
+ void set12HourTimeValues(final TimeOfDay ptTimePicked) {
+ final ldNow = DateTime.now();
+ final ldTime = DateTime(ldNow.year, ldNow.month, ldNow.day,
+ ptTimePicked.hour, ptTimePicked.minute);
+ final lsHour = DateFormat("hh", widget.locale.toString()).format(ldTime);
+ final lsMinute = DateFormat("mm", widget.locale.toString()).format(ldTime);
+
_sTime = '$lsHour:$lsMinute';
- _sPeriod = ltTimePicked.period.index == 0 ? ' AM' : ' PM';
+ _sPeriod = ptTimePicked.period.index == 0 ? ' AM' : ' PM';
}
Future _showTimePickerDialog() async {
final ltTimePicked = await showTimePicker(
context: context,
initialTime: _tTime,
+ initialEntryMode: widget.timePickerEntryModeInput
+ ? TimePickerEntryMode.input
+ : TimePickerEntryMode.dial,
useRootNavigator: widget.useRootNavigator,
routeSettings: widget.routeSettings,
builder: (BuildContext context, Widget? child) {
@@ -772,7 +786,7 @@ class _DateTimePickerState extends FormFieldState {
);
if (ltTimePicked != null) {
- var lsHour = ltTimePicked.minute.toString().padLeft(2, '0');
+ var lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
var lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
if (ltTimePicked.period.index == 0 && lsHour == '12') {
@@ -836,6 +850,9 @@ class _DateTimePickerState extends FormFieldState {
final ltTimePicked = await showTimePicker(
context: context,
initialTime: _tTime,
+ initialEntryMode: widget.timePickerEntryModeInput
+ ? TimePickerEntryMode.input
+ : TimePickerEntryMode.dial,
useRootNavigator: widget.useRootNavigator,
routeSettings: widget.routeSettings,
builder: (BuildContext context, Widget? child) {
@@ -849,7 +866,7 @@ class _DateTimePickerState extends FormFieldState {
if (ltTimePicked != null) {
var lsHour = ltTimePicked.hour.toString().padLeft(2, '0');
- final lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
+ var lsMinute = ltTimePicked.minute.toString().padLeft(2, '0');
if (ltTimePicked.period.index == 0 && lsHour == '12') {
lsHour = '00';
diff --git a/pubspec.yaml b/pubspec.yaml
index 68749fd..580eb4b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
name: date_time_picker
description: A Flutter widget to display a date time form field to show a date or clock dialog.
-version: 2.0.0
+version: 2.1.0
homepage: https://github.com/m3uzz/date_time_picker
environment: