1
1
import 'dart:async' ;
2
2
import 'dart:core' ;
3
3
4
- import 'package:date_range_picker/date_range_picker.dart' as date_range_picker;
5
4
import 'package:flutter/material.dart' ;
6
5
import 'package:flutter/services.dart' ;
7
6
import 'package:flutter/widgets.dart' ;
8
7
import 'package:flutter_form_builder/flutter_form_builder.dart' ;
9
8
import 'package:intl/intl.dart' as intl;
10
9
11
10
/// Field for selecting a range of dates
12
- class FormBuilderDateRangePicker extends FormBuilderField <List < DateTime > > {
11
+ class FormBuilderDateRangePicker extends FormBuilderField <DateTimeRange > {
13
12
//TODO: Add documentation
14
13
final int maxLines;
15
14
final TextInputType keyboardType;
@@ -38,27 +37,40 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
38
37
final bool expands;
39
38
final int minLines;
40
39
final bool showCursor;
41
- final DateTime initialFirstDate;
42
- final DateTime initialLastDate;
43
40
final DateTime firstDate;
44
41
final DateTime lastDate;
45
- final date_range_picker.DatePickerMode initialDatePickerMode;
46
42
final Locale locale;
47
- final date_range_picker.SelectableDayPredicate selectableDayPredicate;
48
43
final intl.DateFormat format;
44
+ final String cancelText; // widget.cancelText,
45
+ final String confirmText; // widget.confirmText,
46
+ final DateTime currentDate; // widget.currentDate,
47
+ final String errorFormatText; // widget.erroerrorFormatText,
48
+ final Widget Function (BuildContext , Widget ) pickerBuilder; // widget.builder,
49
+ final String errorInvalidRangeText; // widget.errorInvalidRangeText,
50
+ final String errorInvalidText; // widget.errorInvalidText,
51
+ final String fieldEndHintText; // widget.fieldEndHintText,
52
+ final String fieldEndLabelText; // widget.fieldEndLabelText,
53
+ final String fieldStartHintText; // widget.fieldStartHintText,
54
+ final String fieldStartLabelText; // widget.fieldStartLabelText,
55
+ final String helpText; // widget.helpText,
56
+ // final DateTimeRange initialDateRange; // widget.initialDateRange,
57
+ final DatePickerEntryMode initialEntryMode; // widget.initialEntryMode,
58
+ final RouteSettings routeSettings; // widget.routeSettings,
59
+ final String saveText; // widget.saveText,
60
+ final bool useRootNavigator; // widget.useRootNavigator,
49
61
50
62
/// Creates field for selecting a range of dates
51
63
FormBuilderDateRangePicker ({
52
64
Key key,
53
65
//From Super
54
66
@required String name,
55
- FormFieldValidator <List < DateTime > > validator,
56
- List < DateTime > initialValue,
67
+ FormFieldValidator <DateTimeRange > validator,
68
+ DateTimeRange initialValue,
57
69
InputDecoration decoration = const InputDecoration (),
58
- ValueChanged <List < DateTime > > onChanged,
59
- ValueTransformer <List < DateTime > > valueTransformer,
70
+ ValueChanged <DateTimeRange > onChanged,
71
+ ValueTransformer <DateTimeRange > valueTransformer,
60
72
bool enabled = true ,
61
- FormFieldSetter <List < DateTime > > onSaved,
73
+ FormFieldSetter <DateTimeRange > onSaved,
62
74
AutovalidateMode autovalidateMode = AutovalidateMode .disabled,
63
75
VoidCallback onReset,
64
76
FocusNode focusNode,
@@ -92,30 +104,25 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
92
104
this .expands = false ,
93
105
this .minLines,
94
106
this .showCursor,
95
- this .initialFirstDate,
96
- this .initialLastDate,
97
- this .initialDatePickerMode = date_range_picker.DatePickerMode .day,
98
107
this .locale,
99
- this .selectableDayPredicate,
100
- }) : /*TODO: Fix assertion
101
- assert(
102
- initialValue == null ||
103
- lastDate == null ||
104
- initialValue[1] == null ||
105
- initialValue[1].isBefore(lastDate),
106
- 'The last date of initialValue must be on or before lastDate'),
107
- assert(
108
- initialValue == null ||
109
- firstDate == null ||
110
- initialValue[0] == null ||
111
- initialValue[0].isAfter(firstDate),
112
- 'The first date of initialValue must be on or after firstDate'),
113
- assert(
114
- lastDate == null ||
115
- firstDate == null ||
116
- lastDate.isAfter(firstDate),
117
- 'lastDate must be on or after firstDate'),*/
118
- super (
108
+ this .cancelText,
109
+ this .confirmText,
110
+ this .currentDate,
111
+ this .errorFormatText,
112
+ this .pickerBuilder,
113
+ this .errorInvalidRangeText,
114
+ this .errorInvalidText,
115
+ this .fieldEndHintText,
116
+ this .fieldEndLabelText,
117
+ this .fieldStartHintText,
118
+ this .fieldStartLabelText,
119
+ this .helpText,
120
+ // this.initialDateRange,
121
+ this .initialEntryMode = DatePickerEntryMode .calendar,
122
+ this .routeSettings,
123
+ this .saveText,
124
+ this .useRootNavigator = true ,
125
+ }) : super (
119
126
key: key,
120
127
initialValue: initialValue,
121
128
name: name,
@@ -128,7 +135,7 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
128
135
onReset: onReset,
129
136
decoration: decoration,
130
137
focusNode: focusNode,
131
- builder: (FormFieldState <List < DateTime > > field) {
138
+ builder: (FormFieldState <DateTimeRange > field) {
132
139
final state = field as FormBuilderDateRangePickerState ;
133
140
134
141
return TextField (
@@ -184,7 +191,7 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
184
191
}
185
192
186
193
class FormBuilderDateRangePickerState
187
- extends FormBuilderFieldState <FormBuilderDateRangePicker , List < DateTime > > {
194
+ extends FormBuilderFieldState <FormBuilderDateRangePicker , DateTimeRange > {
188
195
TextEditingController _effectiveController;
189
196
190
197
@override
@@ -208,40 +215,48 @@ class FormBuilderDateRangePickerState
208
215
Future <void > _handleFocus () async {
209
216
if (effectiveFocusNode.hasFocus && enabled) {
210
217
effectiveFocusNode.unfocus ();
211
- final initialFirstDate = value? .isEmpty ?? true
218
+ /* final initialFirstDate = value?.isEmpty ?? true
212
219
? (widget.initialFirstDate ?? DateTime.now())
213
220
: value[0];
214
221
final initialLastDate = value?.isEmpty ?? true
215
222
? (widget.initialLastDate ?? initialFirstDate)
216
- : (value.length < 2 ? initialFirstDate : value[1 ]);
217
- final picked = await date_range_picker. showDatePicker (
223
+ : (value.length < 2 ? initialFirstDate : value[1]);*/
224
+ final picked = await showDateRangePicker (
218
225
context: context,
219
- initialFirstDate: initialFirstDate,
220
- initialLastDate: initialLastDate,
221
226
firstDate: widget.firstDate,
222
227
lastDate: widget.lastDate,
223
- initialDatePickerMode: widget.initialDatePickerMode,
224
228
locale: widget.locale,
225
229
textDirection: widget.textDirection,
226
- selectableDayPredicate: widget.selectableDayPredicate,
230
+ cancelText: widget.cancelText,
231
+ confirmText: widget.confirmText,
232
+ currentDate: widget.currentDate,
233
+ errorFormatText: widget.errorFormatText,
234
+ builder: widget.pickerBuilder,
235
+ errorInvalidRangeText: widget.errorInvalidRangeText,
236
+ errorInvalidText: widget.errorInvalidText,
237
+ fieldEndHintText: widget.fieldEndHintText,
238
+ fieldEndLabelText: widget.fieldEndLabelText,
239
+ fieldStartHintText: widget.fieldStartHintText,
240
+ fieldStartLabelText: widget.fieldStartLabelText,
241
+ helpText: widget.helpText,
242
+ initialDateRange: value,
243
+ initialEntryMode: widget.initialEntryMode,
244
+ routeSettings: widget.routeSettings,
245
+ saveText: widget.saveText,
246
+ useRootNavigator: widget.useRootNavigator,
227
247
);
228
248
if (picked != null ) {
229
- if (picked.length == 1 ) {
230
- picked.add (picked[0 ]);
231
- }
232
249
didChange (picked);
233
250
}
234
251
}
235
252
}
236
253
237
254
String _valueToText () {
238
- if (value == null || value.isEmpty ) {
255
+ if (value == null ) {
239
256
return '' ;
240
257
}
241
- if (value.length == 1 ) {
242
- return format (value[0 ]);
243
- }
244
- return '${format (value [0 ])} - ${format (value [1 ])}' ;
258
+
259
+ return '${format (value .start )} - ${format (value .end )}' ;
245
260
}
246
261
247
262
String format (DateTime date) => FormBuilderDateRangePicker .tryFormat (
@@ -254,7 +269,7 @@ class FormBuilderDateRangePickerState
254
269
}
255
270
256
271
@override
257
- void didChange (List < DateTime > value) {
272
+ void didChange (DateTimeRange value) {
258
273
super .didChange (value);
259
274
_setTextFieldString ();
260
275
}
0 commit comments