提供的功能是创建一个接受参数的下拉菜单:
2.placeholderText(提示中的文本)
此功能用于从用户那里获取信息的形式。
问题是当_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;
});
}
预期结果:点击后下拉列表中的值会发生变化。 实际结果:无变化