Skip to content

Commit 22d4514

Browse files
committed
Use Flutter's showDateRangePicker instead of date_range_picker
1 parent cc3f84d commit 22d4514

File tree

2 files changed

+67
-53
lines changed

2 files changed

+67
-53
lines changed

lib/src/fields/form_builder_date_range_picker.dart

Lines changed: 67 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import 'dart:async';
22
import 'dart:core';
33

4-
import 'package:date_range_picker/date_range_picker.dart' as date_range_picker;
54
import 'package:flutter/material.dart';
65
import 'package:flutter/services.dart';
76
import 'package:flutter/widgets.dart';
87
import 'package:flutter_form_builder/flutter_form_builder.dart';
98
import 'package:intl/intl.dart' as intl;
109

1110
/// Field for selecting a range of dates
12-
class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
11+
class FormBuilderDateRangePicker extends FormBuilderField<DateTimeRange> {
1312
//TODO: Add documentation
1413
final int maxLines;
1514
final TextInputType keyboardType;
@@ -38,27 +37,40 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
3837
final bool expands;
3938
final int minLines;
4039
final bool showCursor;
41-
final DateTime initialFirstDate;
42-
final DateTime initialLastDate;
4340
final DateTime firstDate;
4441
final DateTime lastDate;
45-
final date_range_picker.DatePickerMode initialDatePickerMode;
4642
final Locale locale;
47-
final date_range_picker.SelectableDayPredicate selectableDayPredicate;
4843
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,
4961

5062
/// Creates field for selecting a range of dates
5163
FormBuilderDateRangePicker({
5264
Key key,
5365
//From Super
5466
@required String name,
55-
FormFieldValidator<List<DateTime>> validator,
56-
List<DateTime> initialValue,
67+
FormFieldValidator<DateTimeRange> validator,
68+
DateTimeRange initialValue,
5769
InputDecoration decoration = const InputDecoration(),
58-
ValueChanged<List<DateTime>> onChanged,
59-
ValueTransformer<List<DateTime>> valueTransformer,
70+
ValueChanged<DateTimeRange> onChanged,
71+
ValueTransformer<DateTimeRange> valueTransformer,
6072
bool enabled = true,
61-
FormFieldSetter<List<DateTime>> onSaved,
73+
FormFieldSetter<DateTimeRange> onSaved,
6274
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
6375
VoidCallback onReset,
6476
FocusNode focusNode,
@@ -92,30 +104,25 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
92104
this.expands = false,
93105
this.minLines,
94106
this.showCursor,
95-
this.initialFirstDate,
96-
this.initialLastDate,
97-
this.initialDatePickerMode = date_range_picker.DatePickerMode.day,
98107
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(
119126
key: key,
120127
initialValue: initialValue,
121128
name: name,
@@ -128,7 +135,7 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
128135
onReset: onReset,
129136
decoration: decoration,
130137
focusNode: focusNode,
131-
builder: (FormFieldState<List<DateTime>> field) {
138+
builder: (FormFieldState<DateTimeRange> field) {
132139
final state = field as FormBuilderDateRangePickerState;
133140

134141
return TextField(
@@ -184,7 +191,7 @@ class FormBuilderDateRangePicker extends FormBuilderField<List<DateTime>> {
184191
}
185192

186193
class FormBuilderDateRangePickerState
187-
extends FormBuilderFieldState<FormBuilderDateRangePicker, List<DateTime>> {
194+
extends FormBuilderFieldState<FormBuilderDateRangePicker, DateTimeRange> {
188195
TextEditingController _effectiveController;
189196

190197
@override
@@ -208,40 +215,48 @@ class FormBuilderDateRangePickerState
208215
Future<void> _handleFocus() async {
209216
if (effectiveFocusNode.hasFocus && enabled) {
210217
effectiveFocusNode.unfocus();
211-
final initialFirstDate = value?.isEmpty ?? true
218+
/*final initialFirstDate = value?.isEmpty ?? true
212219
? (widget.initialFirstDate ?? DateTime.now())
213220
: value[0];
214221
final initialLastDate = value?.isEmpty ?? true
215222
? (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(
218225
context: context,
219-
initialFirstDate: initialFirstDate,
220-
initialLastDate: initialLastDate,
221226
firstDate: widget.firstDate,
222227
lastDate: widget.lastDate,
223-
initialDatePickerMode: widget.initialDatePickerMode,
224228
locale: widget.locale,
225229
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,
227247
);
228248
if (picked != null) {
229-
if (picked.length == 1) {
230-
picked.add(picked[0]);
231-
}
232249
didChange(picked);
233250
}
234251
}
235252
}
236253

237254
String _valueToText() {
238-
if (value == null || value.isEmpty) {
255+
if (value == null) {
239256
return '';
240257
}
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)}';
245260
}
246261

247262
String format(DateTime date) => FormBuilderDateRangePicker.tryFormat(
@@ -254,7 +269,7 @@ class FormBuilderDateRangePickerState
254269
}
255270

256271
@override
257-
void didChange(List<DateTime> value) {
272+
void didChange(DateTimeRange value) {
258273
super.didChange(value);
259274
_setTextFieldString();
260275
}

pubspec.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ dependencies:
1313
flutter_localizations:
1414
sdk: flutter
1515

16-
date_range_picker: ^1.0.6
1716
datetime_picker_formfield: ^2.0.0
1817
dropdown_search: ^0.4.9
1918
flutter_colorpicker: ^0.3.5

0 commit comments

Comments
 (0)