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

Flutter DropdownButton无法选择其他下拉值问题求助

Flutter DropdownButton无法保持选中值的问题解决

问题原因

你的DropdownButton存在两个核心问题导致选中后恢复初始值:

  1. value直接绑定了map['completedVersion'].toInt(),但选中新值后仅更新了versionInput的文本,未修改map['completedVersion']或用状态变量维护当前选中值。组件重建时,value会被重置为初始值,导致选中状态失效。
  2. 下拉列表项基于map['completedVersion']生成,若未更新该值,列表的起始范围也不会随选中值变化(不过从演示看,核心问题是选中值未被状态管理)。

解决方法

通过状态变量维护选中值,配合setState触发组件刷新,即可解决该问题:

步骤1:添加状态变量

在你的State类中声明一个变量保存当前选中的版本号:

int? _selectedVersion;

步骤2:初始化状态变量

在initState中初始化变量,同步到输入框:

@override
void initState() {
  super.initState();
  _selectedVersion = map['completedVersion'].toInt();
  versionInput.text = _selectedVersion.toString();
}

步骤3:修改DropdownButton配置

将value绑定到状态变量,在onChanged中更新状态并触发刷新:

DropdownButton<int>(
  value: _selectedVersion,
  elevation: 16,
  style: TextStyle(color: Theme.of(context).accentColor),
  underline: Container(
    height: 2,
    color: Colors.blueAccent,
  ),
  onChanged: (int? newValue) {
    if (newValue != null) {
      setState(() {
        _selectedVersion = newValue;
        versionInput.text = newValue.toString();
        // 若需要同步更新原map中的值,可添加此行
        // map['completedVersion'] = newValue;
      });
    }
  },
  items: [for (var i = _selectedVersion!; i <= map['requiredVersion']; i++) i]
      .map<DropdownMenuItem<int>>((int value) {
    return DropdownMenuItem<int>(
      value: value,
      child: Text(value.toString()),
    );
  }).toList(),
)

额外说明

如果你的下拉列表应该始终从初始的map['completedVersion']值开始生成(而非当前选中值),只需将列表生成代码中的i = _selectedVersion!改回i = map['completedVersion'].toInt()即可,核心的状态变量管理逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:05:52