Skip to content

Commit e358fbe

Browse files
Martin Kamleithnerdanvick
authored andcommitted
upgrade to datetime_picker_formfield 0.3.2
1 parent 1903199 commit e358fbe

File tree

4 files changed

+100
-72
lines changed

4 files changed

+100
-72
lines changed

example/lib/main.dart

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart';
21
import 'package:flutter/material.dart';
32
import 'package:flutter_form_builder/flutter_form_builder.dart';
43
import 'package:intl/intl.dart';
@@ -149,7 +148,7 @@ class MyHomePageState extends State<MyHomePage> {
149148
FormBuilderDateTimePicker(
150149
attribute: "date",
151150
onChanged: _onChanged,
152-
inputType: InputType.date,
151+
// inputType: InputType.date,
153152
format: DateFormat("yyyy-MM-dd"),
154153
decoration:
155154
InputDecoration(labelText: "Appointment Time"),
@@ -333,34 +332,34 @@ class MyHomePageState extends State<MyHomePage> {
333332
children: languages
334333
.map(
335334
(lang) => Row(
336-
children: <Widget>[
337-
Radio<dynamic>(
338-
value: lang,
339-
groupValue: field.value,
340-
onChanged: (dynamic value) {
341-
field.didChange(lang);
342-
},
343-
),
344-
lang != "Other"
345-
? Text(lang)
346-
: Expanded(
347-
child: Row(
348-
children: <Widget>[
349-
Text(
350-
lang,
351-
),
352-
SizedBox(width: 20),
353-
Expanded(
354-
child: TextFormField(
355-
key:
356-
_specifyTextFieldKey,
357-
),
358-
),
359-
],
360-
),
361-
),
362-
],
335+
children: <Widget>[
336+
Radio<dynamic>(
337+
value: lang,
338+
groupValue: field.value,
339+
onChanged: (dynamic value) {
340+
field.didChange(lang);
341+
},
363342
),
343+
lang != "Other"
344+
? Text(lang)
345+
: Expanded(
346+
child: Row(
347+
children: <Widget>[
348+
Text(
349+
lang,
350+
),
351+
SizedBox(width: 20),
352+
Expanded(
353+
child: TextFormField(
354+
key:
355+
_specifyTextFieldKey,
356+
),
357+
),
358+
],
359+
),
360+
),
361+
],
362+
),
364363
)
365364
.toList(growable: false),
366365
),

lib/src/fields/form_builder_date_time_picker.dart

Lines changed: 61 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import 'package:flutter/services.dart';
77
import 'package:flutter_form_builder/flutter_form_builder.dart';
88
import 'package:intl/intl.dart';
99

10+
enum InputType { date, time, both }
11+
1012
class FormBuilderDateTimePicker extends StatefulWidget {
1113
final String attribute;
1214
final List<FormFieldValidator> validators;
@@ -184,19 +186,12 @@ class _FormBuilderDateTimePickerState extends State<FormBuilderDateTimePicker> {
184186
Widget build(BuildContext context) {
185187
_readonly = (_formState?.readonly == true) ? true : widget.readonly;
186188

187-
return DateTimePickerFormField(
189+
return DateTimeField(
188190
key: _fieldKey,
189-
inputType: widget.inputType,
190191
initialValue: widget.initialValue,
191192
format: widget.format != null
192193
? widget.format
193194
: _dateTimeFormats[widget.inputType],
194-
enabled: !_readonly,
195-
firstDate: widget.firstDate,
196-
lastDate: widget.lastDate,
197-
decoration: widget.decoration.copyWith(
198-
enabled: !_readonly,
199-
),
200195
onSaved: (val) {
201196
if (widget.valueTransformer != null) {
202197
var transformed = widget.valueTransformer(val);
@@ -212,31 +207,65 @@ class _FormBuilderDateTimePickerState extends State<FormBuilderDateTimePicker> {
212207
return null;
213208
},
214209
onChanged: widget.onChanged,
215-
builder: widget.builder,
216-
datePicker: widget.datePicker,
217-
timePicker: widget.timePicker,
218-
onFieldSubmitted: widget.onFieldSubmitted,
219210
autovalidate: widget.autovalidate,
220-
style: widget.style,
221-
textDirection: widget.textDirection,
222-
textAlign: widget.textAlign,
223-
maxLength: widget.maxLength,
224-
autofocus: widget.autofocus,
225-
autocorrect: widget.autocorrect,
226-
controller: widget.controller,
227-
editable: widget.editable,
228-
focusNode: widget.focusNode,
229-
initialDate: widget.initialDate,
230-
initialDatePickerMode: widget.initialDatePickerMode,
231-
initialTime: widget.initialTime,
232-
inputFormatters: widget.inputFormatters,
233-
keyboardType: widget.keyboardType,
234-
locale: widget.locale,
235-
maxLengthEnforced: widget.maxLengthEnforced,
236-
maxLines: widget.maxLines,
237-
obscureText: widget.obscureText,
238-
resetIcon: widget.resetIcon,
239-
selectableDayPredicate: widget.selectableDayPredicate,
211+
resetIcon: Icon(widget.resetIcon),
212+
child: TextField(
213+
textDirection: widget.textDirection,
214+
textAlign: widget.textAlign,
215+
maxLength: widget.maxLength,
216+
autofocus: widget.autofocus,
217+
decoration: widget.decoration,
218+
enabled: widget.editable,
219+
autocorrect: widget.autocorrect,
220+
readOnly: widget.editable,
221+
controller: widget.controller,
222+
focusNode: widget.focusNode,
223+
inputFormatters: widget.inputFormatters,
224+
keyboardType: widget.keyboardType,
225+
maxLengthEnforced: widget.maxLengthEnforced,
226+
maxLines: widget.maxLines,
227+
obscureText: widget.obscureText,
228+
),
229+
onShowPicker: (ctx, time) async {
230+
switch (widget.inputType) {
231+
case InputType.date:
232+
return _showDatePicker(context);
233+
case InputType.time:
234+
return DateTimeField.convert(await _showTimePicker(context));
235+
case InputType.both:
236+
final date = await _showDatePicker(context);
237+
if (date != null) {
238+
final time = await _showTimePicker(context);
239+
return DateTimeField.combine(date, time);
240+
}
241+
return _fieldKey.currentState.value ?? widget.initialValue;
242+
default:
243+
throw "unexcepted input type ${widget.inputType}";
244+
}
245+
},
240246
);
241247
}
248+
249+
Future<DateTime> _showDatePicker(BuildContext context) {
250+
if (widget.datePicker != null) {
251+
return widget.datePicker(context);
252+
} else {
253+
return showDatePicker(
254+
context: context,
255+
selectableDayPredicate: widget.selectableDayPredicate,
256+
initialDatePickerMode:
257+
widget.initialDatePickerMode ?? DatePickerMode.day,
258+
initialDate: widget.initialDate,
259+
firstDate: widget.firstDate,
260+
lastDate: widget.lastDate);
261+
}
262+
}
263+
264+
Future<TimeOfDay> _showTimePicker(BuildContext context) {
265+
if (widget.timePicker != null) {
266+
return widget.timePicker(context);
267+
} else {
268+
return showTimePicker(context: context, initialTime: widget.initialTime);
269+
}
270+
}
242271
}

pubspec.lock

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Generated by pub
2-
# See https://www.dartlang.org/tools/pub/glossary#lockfile
2+
# See https://dart.dev/tools/pub/glossary#lockfile
33
packages:
44
analyzer:
55
dependency: transitive
@@ -21,7 +21,7 @@ packages:
2121
name: async
2222
url: "https://pub.dartlang.org"
2323
source: hosted
24-
version: "2.1.0"
24+
version: "2.2.0"
2525
boolean_selector:
2626
dependency: transitive
2727
description:
@@ -70,7 +70,7 @@ packages:
7070
name: datetime_picker_formfield
7171
url: "https://pub.dartlang.org"
7272
source: hosted
73-
version: "0.2.0"
73+
version: "0.3.2"
7474
flutter:
7575
dependency: "direct main"
7676
description: flutter
@@ -241,7 +241,7 @@ packages:
241241
name: pedantic
242242
url: "https://pub.dartlang.org"
243243
source: hosted
244-
version: "1.5.0"
244+
version: "1.7.0"
245245
pool:
246246
dependency: transitive
247247
description:
@@ -262,7 +262,7 @@ packages:
262262
name: quiver
263263
url: "https://pub.dartlang.org"
264264
source: hosted
265-
version: "2.0.2"
265+
version: "2.0.3"
266266
shelf:
267267
dependency: transitive
268268
description:
@@ -358,21 +358,21 @@ packages:
358358
name: test
359359
url: "https://pub.dartlang.org"
360360
source: hosted
361-
version: "1.6.1"
361+
version: "1.6.3"
362362
test_api:
363363
dependency: transitive
364364
description:
365365
name: test_api
366366
url: "https://pub.dartlang.org"
367367
source: hosted
368-
version: "0.2.4"
368+
version: "0.2.5"
369369
test_core:
370370
dependency: transitive
371371
description:
372372
name: test_core
373373
url: "https://pub.dartlang.org"
374374
source: hosted
375-
version: "0.2.3"
375+
version: "0.2.5"
376376
typed_data:
377377
dependency: transitive
378378
description:
@@ -423,5 +423,5 @@ packages:
423423
source: hosted
424424
version: "2.1.15"
425425
sdks:
426-
dart: ">=2.2.0 <3.0.0"
427-
flutter: ">=0.1.4 <2.0.0"
426+
dart: ">=2.2.2 <3.0.0"
427+
flutter: ">=1.0.0 <2.0.0"

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ dependencies:
1515
intl: ^0.15.8
1616
sy_flutter_widgets: ^0.1.4
1717
flutter_chips_input: ^1.3.0
18-
datetime_picker_formfield: ^0.2.0
18+
datetime_picker_formfield: ^0.3.2
1919
# signature: ^2.0.0 - Doesn't implement onChanged, submitted PR. Meanwhile using local clone with onChanged
2020
validators: ^2.0.0+1
2121

0 commit comments

Comments
 (0)