flutterdart

Flutter Date Picker function for multiple fields


How to use the below code for single function multiple textformfield controller to pass the date value. Or I have to write multiple function for all controllers in the form fields for date picker ?

 ....                      
                         TextFormField(
                                  decoration: inputDecoration(
                                      'Enter Start Date',
                                      'Start Date',
                                      datestartCtrl),
                                  controller: datestartCtrl,
                                  onTap: () => _selectDate(context),
                                ),
                                SizedBox(
                                  height: 10,
                                ),
                                TextFormField(
                                  decoration: inputDecoration(
                                      'Enter Finish Date',
                                      'Date Finished',
                                      datefinishCtrl),
                                  controller: datefinishCtrl,
                                  onTap: () => _selectDate(context),
                                ),
    .....
    
    Future<Null> _selectDate(BuildContext context) async {
      var selectedDate = DateTime.now();
        DateFormat formatter = DateFormat('dd MMMM yyyy');//specifies day/month/year format
        final DateTime? picked = await showDatePicker(
            context: context,
            initialDate: selectedDate,
            firstDate: DateTime(1901, 1),
            lastDate: DateTime.now());
        if (picked != null && picked != selectedDate)
          setState(() {
            selectedDate = picked;
            datestartCtrl.value = TextEditingValue(text: formatter.format(picked));//Use formatter to format selected date and assign to text field
          });
      }

Solution

  • TextFormField(
                                          decoration: inputDecoration(
                                              'Enter Start Date',
                                              'Start Date',
                                              datestartCtrl),
                                          controller: datestartCtrl,
                                          onTap: () => _selectDate(context,datestartCtrl),
                                        ),
                                        SizedBox(
                                          height: 10,
                                        ),
                                        TextFormField(
                                          decoration: inputDecoration(
                                              'Enter Finish Date',
                                              'Date Finished',
                                              datefinishCtrl),
                                          controller: datefinishCtrl,
                                          onTap: () => _selectDate(context,datefinishCtrl),
                                        ),
    

    Method for datepicker

     Future<Null> _selectDate(BuildContext context, TextEditingController controller) async {
              var selectedDate = DateTime.now();
                DateFormat formatter = DateFormat('dd MMMM yyyy');
                final DateTime? picked = await showDatePicker(
                    context: context,
                    initialDate: selectedDate,
                    firstDate: DateTime(1901, 1),
                    lastDate: DateTime.now());
                if (picked != null && picked != selectedDate)
                  setState(() {
                    controller.value = TextEditingValue(text: formatter.format(picked));
                  });
              }