无法独立更改Flutter中多个下拉菜单的值

时间:2019-04-18 10:35:03

标签: drop-down-menu dart flutter flutter-layout

提供的功能是创建一个接受参数的下拉菜单:

  1. variableToBeAdded(要添加到Firebase数据库的变量)

2.placeholderText(提示中的文本)

  1. 由哪些项目创建dropDownMenuItems的数组。

此功能用于从用户那里获取信息的形式。

问题是当_gender字符串被显式引用(即不是作为函数的参数)时,下拉菜单的值会更改。但是,当引用variableToBeAdded参数时,它不再起作用,这使我感到困惑,因为它们应该具有完全相同的原始类型(字符串)。我宁愿写可重用的代码,也不必复制和粘贴我打算在表单上的每个下拉菜单项。我大约需要7。

我还应该提到这一切都发生在有状态的小工具中

我尝试更改是否在onChange setState中声明variableToBeAdded的新值的位置。我还探讨了在initState()中声明String失败

List<String> gendersArray = <String>["Male", "Female", "Other",];

final _formKey = GlobalKey<FormState>();
String _gender;

dropdownMenu(String variableToBeAdded, String placeholderText, array) {
    variableToBeAdded.toString();
    return new Container(
        child: new DropdownButton<String>(
            isExpanded: true,
            hint: Container(
              alignment: Alignment.centerLeft,
              padding: EdgeInsets.only(bottom: 7.0),
              child: text(placeholderText, Colors.grey.shade600, 15.0),
              //text is a function that does the text styling
            ),
            value: variableToBeAdded,
            items: array
                .map<DropdownMenuItem<String>>((String value) {
              return DropdownMenuItem<String>(
                value: value,
                child: Container(
                  child: text(value, Colors.black, 15.0),
                ),
              );
            }).toList(),
            onChanged: (s) {
              setState(() {
                variableToBeAdded = s;
              });
            }
        )
    );
  }

//In the form (in the build) call the function 
               Form(
                  key: _formKey,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    children: <Widget>[
                      SizedBox(height: 10.0),
                      dropdownMenu(_gender, "Gender", gendersArray),
                      SizedBox(height: 10.0),
                      ),
                    ],
                  ),
                ),

当onChanged调用函数中的_gender字符串时。例如

onChanged: (s) {
              setState(() {
                _gender = s;
              });
            }

预期结果:点击后下拉列表中的值会发生变化。 实际结果:值更改。

当onChanged调用variableToBeAdded参数时。例如

onChanged: (s) {
              setState(() {
                variableToBeAdded = s;
              });
            }

预期结果:点击后下拉列表中的值会发生变化。 实际结果:无变化

0 个答案:

没有答案