我需要建议。我已经在下拉菜单上做了条件,起初它是有效的,但是自从我在我的代码中做了一个改变,它就不工作了。问题是用户无法选择菜单。
这是我到目前为止写的代码:
在BuildContext下面有一个变量,在最上面:
Widget build(BuildContext context) {
String selectedCategoryFood = '';
然后是下拉菜单:
child: DropdownButton<String>(
icon: Padding(
padding: const EdgeInsets.only(right: 10, top: 8),
child: SvgPicture.asset(
Assets.icons.dropdownIcon.path,
fit: BoxFit.scaleDown,
),
),
style: body1(color: ColorName.blackPrimary),
items: <String>[
'Burger',
'Ice Cream',
].map((String value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
}).toList(),
hint: Padding(
padding: const EdgeInsets.only(top: 8, left: 10),
child: Text(
style: body1(color: ColorName.grey),
selectedCategoryFood.isEmpty
? 'Category Food'
: selectedCategoryFood),
),
borderRadius: BorderRadius.circular(10),
underline: const SizedBox(),
isExpanded: true,
onChanged: (value) {
if (value != null) {
setState(() {
selectedCategoryFood = value;
});
}
},
),
问题是您已经在您的build
方法中定义了selectedCategoryFood
:
Widget build(BuildContext context) {
var selectedCategoryFood = "";
每一个setState
都被重置
要解决这个问题,在_state
类中声明selectedCategoryFood
:
class _TestState extends State<Test> {
var selectedCategoryFood = "";
@override
Widget build(BuildContext context) {
return Scaffold(
setState
引起重建
将变量初始化放在构建方法中。
你必须把变量移到构建方法之外。
String selectedCategoryFood = '';
Widget build(BuildContext context) {...}