dateRangePickerField method

String dateRangePickerField(
  1. String elementName,
  2. String type,
  3. Map<String, dynamic> map, {
  4. String? parent,
})

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
''';
}