You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter DropdownMenu选中失效求助:修改代码后无法选择菜单选项

问题原因

你把状态变量selectedCategoryFood定义在了build(BuildContext context)方法内部。每次调用setState()触发UI重建时,build方法会重新执行,这个变量会被重新初始化为空字符串'',导致用户选择的选项无法被持久保存,视觉上表现为无法选择菜单选项。

解决方案

1. 调整状态变量的定义位置

将selectedCategoryFood从build方法内部移到对应的State类的成员变量位置,确保变量的生命周期与State实例一致,不会在每次UI重建时被重置。

修改后的代码示例:

class _YourPageState extends State<YourPage> {
  // 把变量定义为State类的成员变量
  String selectedCategoryFood = '';

  @override
  Widget build(BuildContext context) {
    // 移除原build方法内的变量定义
    return // 你的页面布局代码
      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;
            });
          }
        },
      ),
    );
  }
}

2. (可选)添加value属性优化组件状态

当前代码通过hint显示选中值,建议给DropdownButton添加value属性,让组件状态更明确,交互更符合Flutter组件设计规范:

DropdownButton<String>(
  // 添加这一行,绑定选中值
  value: selectedCategoryFood.isEmpty ? null : selectedCategoryFood,
  // 其余原有代码保持不变
)

内容的提问来源于stack exchange,提问作者Bilbo Baggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:35:12