@@ -236,7 +236,7 @@ class FormBuilderDateTimePicker extends FormBuilderField<DateTime> {
236
236
237
237
return DateTimeField (
238
238
initialValue: state.initialValue,
239
- format: state.dateFormat ,
239
+ format: state._dateFormat ,
240
240
validator: validator,
241
241
onShowPicker: state.onShowPicker,
242
242
autovalidate: autovalidateMode != AutovalidateMode .disabled &&
@@ -273,6 +273,7 @@ class FormBuilderDateTimePicker extends FormBuilderField<DateTime> {
273
273
strutStyle: strutStyle,
274
274
textCapitalization: textCapitalization,
275
275
textInputAction: textInputAction,
276
+ onChanged: (val) => state.didChange (val),
276
277
);
277
278
},
278
279
);
@@ -288,17 +289,16 @@ class _FormBuilderDateTimePickerState
288
289
extends FormBuilderFieldState <FormBuilderDateTimePicker , DateTime > {
289
290
TextEditingController _textFieldController;
290
291
291
- // DateTime stateCurrentValue;
292
-
293
- DateFormat get dateFormat => widget.format ?? _getDefaultDateTimeFormat ();
292
+ DateFormat _dateFormat;
294
293
295
294
@override
296
295
void initState () {
297
296
super .initState ();
298
297
_textFieldController = widget.controller ?? TextEditingController ();
298
+ _dateFormat = widget.format ?? _getDefaultDateTimeFormat ();
299
299
final initVal = initialValue;
300
300
_textFieldController.text =
301
- initVal == null ? '' : dateFormat .format (initVal);
301
+ initVal == null ? '' : _dateFormat .format (initVal);
302
302
}
303
303
304
304
@override
@@ -318,25 +318,24 @@ class _FormBuilderDateTimePickerState
318
318
}*/
319
319
320
320
DateFormat _getDefaultDateTimeFormat () {
321
- final appLocale = widget.locale ?? Localizations .localeOf (context);
322
- final appLocaleCode = appLocale.toString ();
321
+ final languageCode = widget.locale? .languageCode;
323
322
switch (widget.inputType) {
324
323
case InputType .time:
325
- return DateFormat .Hm (appLocaleCode );
324
+ return DateFormat .Hm (languageCode );
326
325
case InputType .date:
327
- return DateFormat .yMd (appLocaleCode );
326
+ return DateFormat .yMd (languageCode );
328
327
case InputType .both:
329
328
default :
330
- return DateFormat .yMd (appLocaleCode ).add_Hms ();
329
+ return DateFormat .yMd (languageCode ).add_Hms ();
331
330
}
332
331
}
333
332
334
333
LocaleType _localeType () {
335
- final locale = widget.locale ?? Localizations . localeOf (context);
336
- final languageCode = locale.languageCode ;
334
+ final shortLocaleCode = widget.locale? .languageCode ??
335
+ Intl . shortLocale ( Intl . getCurrentLocale ()) ;
337
336
return LocaleType .values.firstWhere (
338
- (_) => languageCode == describeEnum (_),
339
- orElse: () => null ,
337
+ (_) => shortLocaleCode == describeEnum (_),
338
+ orElse: () => LocaleType .en ,
340
339
);
341
340
}
342
341
@@ -346,12 +345,11 @@ class _FormBuilderDateTimePickerState
346
345
DateTime newValue;
347
346
switch (widget.inputType) {
348
347
case InputType .date:
349
- newValue = await _showDatePicker (context, currentValue) ?? currentValue ;
348
+ newValue = await _showDatePicker (context, currentValue);
350
349
break ;
351
350
case InputType .time:
352
351
final newTime = await _showTimePicker (context, currentValue);
353
- newValue =
354
- newTime != null ? DateTimeField .convert (newTime) : currentValue;
352
+ newValue = null != newTime ? DateTimeField .convert (newTime) : null ;
355
353
break ;
356
354
case InputType .both:
357
355
final date = await _showDatePicker (context, currentValue);
@@ -421,36 +419,30 @@ class _FormBuilderDateTimePickerState
421
419
}
422
420
423
421
Future <TimeOfDay > _showTimePicker (
424
- BuildContext context, DateTime currentValue) {
422
+ BuildContext context, DateTime currentValue) async {
425
423
if (widget.timePicker != null ) {
426
424
return widget.timePicker (context);
427
425
} else {
428
426
if (widget.pickerType == PickerType .cupertino) {
429
- if (widget.alwaysUse24HourFormat) {
430
- return DatePicker .showTimePicker (
431
- context,
432
- showTitleActions: true ,
433
- currentTime: currentValue,
434
- showSecondsColumn: false ,
435
- locale: _localeType (),
436
- ).then (
437
- (result) {
438
- return TimeOfDay .fromDateTime (result ?? currentValue);
439
- },
440
- );
441
- }
442
- return DatePicker .showTime12hPicker (
443
- context,
444
- showTitleActions: true ,
445
- currentTime: currentValue,
446
- locale: _localeType (),
447
- ).then (
448
- (result) {
449
- return TimeOfDay .fromDateTime (result ?? currentValue);
450
- },
451
- );
427
+ final timePicker = widget.alwaysUse24HourFormat
428
+ ? DatePicker .showTimePicker (
429
+ context,
430
+ showTitleActions: true ,
431
+ currentTime: currentValue,
432
+ showSecondsColumn: false ,
433
+ locale: _localeType (),
434
+ )
435
+ : DatePicker .showTime12hPicker (
436
+ context,
437
+ showTitleActions: true ,
438
+ currentTime: currentValue,
439
+ locale: _localeType (),
440
+ );
441
+ final timePickerResult = await timePicker;
442
+ final newDateTime = timePickerResult ?? currentValue;
443
+ return null != newDateTime ? TimeOfDay .fromDateTime (newDateTime) : null ;
452
444
}
453
- return showTimePicker (
445
+ final timePickerResult = await showTimePicker (
454
446
context: context,
455
447
initialTime: currentValue != null
456
448
? TimeOfDay .fromDateTime (currentValue)
@@ -459,7 +451,8 @@ class _FormBuilderDateTimePickerState
459
451
(BuildContext context, Widget child) {
460
452
return MediaQuery (
461
453
data: MediaQuery .of (context).copyWith (
462
- alwaysUse24HourFormat: widget.alwaysUse24HourFormat),
454
+ alwaysUse24HourFormat: widget.alwaysUse24HourFormat,
455
+ ),
463
456
child: child,
464
457
);
465
458
},
@@ -469,20 +462,15 @@ class _FormBuilderDateTimePickerState
469
462
helpText: widget.helpText,
470
463
confirmText: widget.confirmText,
471
464
cancelText: widget.cancelText,
472
- ).then (
473
- (result) {
474
- return result ??
475
- (currentValue != null
476
- ? TimeOfDay .fromDateTime (currentValue)
477
- : null );
478
- },
479
465
);
466
+ return timePickerResult ??
467
+ (currentValue != null ? TimeOfDay .fromDateTime (currentValue) : null );
480
468
}
481
469
}
482
470
483
471
@override
484
- void patchValue (DateTime val) {
485
- super .patchValue (val);
486
- _textFieldController.text = val == null ? '' : dateFormat .format (val);
472
+ void didChange (DateTime val) {
473
+ super .didChange (val);
474
+ _textFieldController.text = val == null ? '' : _dateFormat .format (val);
487
475
}
488
476
}
0 commit comments