dateRangePickerField method
Implementation
String dateRangePickerField(String elementName, String type, Map<String, dynamic> map, {String? parent}) {
return '''
void save(DateTime date, bool start) {
final dates = _formData['$elementName']?.split(',') ?? [];
dates[start ? 0 : 1] = date.toIso8601String().substring(0, 10);
onSaved('$elementName', dates.join(','));
}
return SizedBox(
height: 100,
child: Column(
children: [
Row(children: const [Text('${map['label'] ?? elementName}')]),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 100,
child: InputDatePickerFormField(
fieldLabelText: "${map['fieldLabelStartText'] ?? 'Start Date'}",
initialDate: DateTime.parse(initialStartDate),
firstDate: DateTime.parse(firstDate),
lastDate: DateTime.parse(lastDate),
onDateSaved: (date) => save(date, true),
onDateSubmitted: (date) => save(date, true),
),
), // Start Date field
SizedBox(
width: 100,
child: InputDatePickerFormField(
fieldLabelText: "${map['fieldLabelEndText'] ?? 'End Date'}",
initialDate: DateTime.parse(initialEndDate),
firstDate: DateTime.parse(firstDate),
lastDate: DateTime.parse(lastDate),
onDateSaved: (date) => save(date, false),
onDateSubmitted: (date) => save(date, false),
),
), // End Date field
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: IconButton(
icon: const Icon(Icons.calendar_today),
onPressed: () async {
final DateTimeRange? date = await showDateRangePicker(
context: context,
initialDateRange: DateTimeRange(
start: DateTime.parse(initialStartDate),
end: DateTime.parse(initialEndDate),
),
firstDate: DateTime.parse(firstDate),
lastDate: DateTime.parse(lastDate),
helpText: '${map['helpText'] ?? 'Select ' + elementName[0].toUpperCase() + elementName.substring(1) + ' dates'}',
cancelText: '${map['cancelText'] ?? 'Cancel'}',
confirmText: '${map['confirmText'] ?? 'Confirm'}',
saveText: '${map['saveText'] ?? 'Done'}',
errorFormatText: "${map['errorFormat'] ?? 'Invalid date format'}",
errorInvalidText: "${map['errorInvalidText'] ?? 'Invalid date'}",
errorInvalidRangeText: "${map['errorInvalidRange'] ?? 'Invalid date range'}",
fieldStartHintText: "${map['fieldStartHintText'] ?? 'Start date'}",
fieldEndHintText: "${map['fieldEndHintText'] ?? 'End date'}",
fieldStartLabelText: "${map['fieldStartLabelText'] ?? '$elementName start'}",
fieldEndLabelText: "${map['fieldEndLabelText'] ?? '$elementName end'}",
textDirection: TextDirection.${map['textDirection'] ?? 'ltr'},
builder: (context, child) {
return Column(
children: [
SizedBox(height: MediaQuery.of(context).size.height * 0.1),
ConstrainedBox(
constraints: BoxConstraints(
maxWidth: 400.0,
maxHeight: MediaQuery.of(context).size.height * 0.8,
),
child: child,
) // ConstrainedBox
], // Column
); // Column
},
); // showDateRangePicker
// user picked a date, probably
if (date != null) {
save(date.start, true);
save(date.end, false);
}
},
),
), // End of Date Range Picker
], // end Row children
), // end Row
], // end Column children
), // end Column
) // end SizedBox
''';
}