@@ -4,10 +4,13 @@ import 'dart:ui' as ui;
4
4
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart' ;
5
5
import 'package:flutter/material.dart' ;
6
6
import 'package:flutter/services.dart' ;
7
+ import 'package:flutter_datetime_picker/flutter_datetime_picker.dart' ;
7
8
import 'package:flutter_form_builder/flutter_form_builder.dart' ;
9
+ import 'package:flutter_form_builder/src/utils.dart' ;
8
10
import 'package:intl/intl.dart' ;
9
11
10
12
enum InputType { date, time, both }
13
+ enum PickerType { material, cupertino }
11
14
12
15
class FormBuilderDateTimePicker extends FormBuilderField {
13
16
/// The date/time picker dialogs to show.
@@ -133,6 +136,8 @@ class FormBuilderDateTimePicker extends FormBuilderField {
133
136
final DatePickerEntryMode initialEntryMode;
134
137
final RouteSettings routeSettings;
135
138
139
+ final PickerType pickerType;
140
+
136
141
FormBuilderDateTimePicker ({
137
142
Key key,
138
143
//From Super
@@ -149,6 +154,7 @@ class FormBuilderDateTimePicker extends FormBuilderField {
149
154
VoidCallback onReset,
150
155
FocusNode focusNode,
151
156
this .inputType = InputType .both,
157
+ this .pickerType = PickerType .material,
152
158
this .scrollPadding = const EdgeInsets .all (20.0 ),
153
159
this .cursorWidth = 2.0 ,
154
160
this .enableInteractiveSelection = true ,
@@ -216,22 +222,11 @@ class FormBuilderDateTimePicker extends FormBuilderField {
216
222
decoration: decoration,
217
223
builder: (FormFieldState field) {
218
224
final _FormBuilderDateTimePickerState state = field;
225
+
219
226
return DateTimeField (
220
227
key: state.fieldKey,
221
228
initialValue: state.initialValue,
222
229
format: state.dateFormat,
223
- /*onSaved: (val) {
224
- var value = _fieldKey.currentState.value;
225
- var transformed;
226
- if (valueTransformer != null) {
227
- transformed = valueTransformer(val);
228
- _formState?.setAttributeValue(attribute, transformed);
229
- } else
230
- _formState?.setAttributeValue(attribute, value);
231
- if (onSaved != null) {
232
- onSaved(transformed ?? value);
233
- }
234
- },*/
235
230
validator: validator,
236
231
onShowPicker: state.onShowPicker,
237
232
autovalidate: autovalidate,
@@ -294,8 +289,8 @@ class _FormBuilderDateTimePickerState extends FormBuilderFieldState {
294
289
TextEditingController _textFieldController;
295
290
DateTime stateCurrentValue;
296
291
297
- DateFormat get dateFormat => _dateFormat;
298
- DateFormat _dateFormat ;
292
+ DateFormat get dateFormat =>
293
+ widget.format ?? _dateTimeFormats[widget.inputType] ;
299
294
300
295
final _dateTimeFormats = {
301
296
InputType .both: DateFormat .yMd ().add_jm (),
@@ -309,9 +304,8 @@ class _FormBuilderDateTimePickerState extends FormBuilderFieldState {
309
304
stateCurrentValue = _initialValue;
310
305
_focusNode = widget.focusNode ?? FocusNode ();
311
306
_textFieldController = widget.controller ?? TextEditingController ();
312
- _dateFormat = widget.format ?? _dateTimeFormats[widget.inputType];
313
307
_textFieldController.text =
314
- _initialValue == null ? '' : _dateFormat .format (_initialValue);
308
+ _initialValue == null ? '' : dateFormat .format (_initialValue);
315
309
_focusNode.addListener (_handleFocus);
316
310
}
317
311
@@ -359,6 +353,18 @@ class _FormBuilderDateTimePickerState extends FormBuilderFieldState {
359
353
if (widget.datePicker != null ) {
360
354
return widget.datePicker (context);
361
355
} else {
356
+ if (widget.pickerType == PickerType .cupertino) {
357
+ return DatePicker .showDatePicker (
358
+ context,
359
+ showTitleActions: true ,
360
+ minTime: widget.firstDate,
361
+ maxTime: widget.lastDate,
362
+ currentTime: currentValue,
363
+ locale: enumValueFromString (
364
+ (widget.locale ?? Localizations .localeOf (context))? .languageCode,
365
+ LocaleType .values),
366
+ );
367
+ }
362
368
return showDatePicker (
363
369
context: context,
364
370
selectableDayPredicate: widget.selectableDayPredicate,
@@ -396,6 +402,36 @@ class _FormBuilderDateTimePickerState extends FormBuilderFieldState {
396
402
if (widget.timePicker != null ) {
397
403
return widget.timePicker (context);
398
404
} else {
405
+ if (widget.pickerType == PickerType .cupertino) {
406
+ if (widget.alwaysUse24HourFormat) {
407
+ return DatePicker .showTimePicker (
408
+ context,
409
+ showTitleActions: true ,
410
+ currentTime: currentValue,
411
+ showSecondsColumn: false ,
412
+ locale: enumValueFromString (
413
+ (widget.locale ?? Localizations .localeOf (context))
414
+ ? .languageCode,
415
+ LocaleType .values),
416
+ ).then (
417
+ (result) {
418
+ return TimeOfDay .fromDateTime (result ?? currentValue);
419
+ },
420
+ );
421
+ }
422
+ return DatePicker .showTime12hPicker (
423
+ context,
424
+ showTitleActions: true ,
425
+ currentTime: currentValue,
426
+ locale: enumValueFromString (
427
+ (widget.locale ?? Localizations .localeOf (context))? .languageCode,
428
+ LocaleType .values),
429
+ ).then (
430
+ (result) {
431
+ return TimeOfDay .fromDateTime (result ?? currentValue);
432
+ },
433
+ );
434
+ }
399
435
return showTimePicker (
400
436
context: context,
401
437
initialTime: currentValue != null
0 commit comments