在 Flutter 中从 showDatePicker 中选择日期时,自定义下拉小部件会重置

问题描述

我正在开发一个非常简单的应用程序来测试表单的所有控件。 我有一个 DropdownButtonFormField自定义小部件,它有一个单独的文件,并具有以下代码,其中包含一个扩展 FormField 的类:

CWGenderFormField(
  {int cwGenderValue = 0,FormFieldSetter<int> onSaved,FormFieldValidator<int> validator,AutovalidateMode autovalidatemode = AutovalidateMode.always})
  : super(
        onSaved: onSaved,validator: validator,initialValue: cwGenderValue,autovalidateMode: autovalidatemode,builder: (FormFieldState<int> state) {
          return Container(
            child: DropdownButtonFormField(
              icon: Icon(Icons.arrow_drop_down),hint: Text("Select Gender"),elevation: 8,validator: (dmiGender) {
                if (dmiGender.toString() == "0") {
                  return "Please select a Gender";
                }
                return null;
              },value: cwGenderValue,items: _cwGenderItems,onChanged: (dmiGender) {
                state.didChange(cwGenderValue = dmiGender);
              },onSaved: (dmiGender) {
                state.didChange(cwGenderValue = dmiGender);
              },),);
        });

这里的 _cwGenderItems 是包含菜单项的 static final List<DropdownMenuItem<int>>:选择、男性等
我在带有以下代码段的 dart 文件中使用了它:

...
CWGenderFormField(
              onSaved: (ddGender) {
                iGender = ddGender;
              },...

接下来我有显示日期选择器的代码
TextFormField(
              decoration: inputdecoration(
                  icon: Icons.calendar_today_outlined,hintText: 'Tap to select date of birth',labelText: 'Date of Birth',context: context),controller: tecdob,readOnly: true,keyboardType: TextInputType.datetime,style: Theme.of(context).inputdecorationTheme.labelStyle,onTap: () {
                showDatePicker(
                  context: context,initialDate: DateTime.tryParse(strdob) == null
                      ? DateTime(DateTime.Now().year - 18,DateTime.Now().month,DateTime.Now().day)
                      : DateTime.parse(strdob),fieldHintText: 'Must be at least 18 years',firstDate: DateTime(DateTime.Now().year - 100,DateTime.Now().day),lastDate: DateTime(DateTime.Now().year - 18,).then((dpSelecteddob) {
                  setState(() {
                    iGender = iGender;
                    strdob = dpSelecteddob.toString();
                    DateTime strdobTemp = DateTime.parse(strdob);
                    tecdob.text = strdobTemp.day.toString() +
                        " - " +
                        strdobTemp.month.toString() +
                        " - " +
                        strdobTemp.year.toString();
                  });
                });
              },

这里,`tecdob = TextEditingController()`

现在,您可以在附加的 GIF 中看到,从日期选择器中选择日期时,我的下拉列表会重置。

DropDown resetting to initial value on selecting date from date picker


请指导如何保留下拉菜单的值。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)