Flutter DropdownButton无法选择其他下拉值问题求助
问题原因
你的DropdownButton存在两个核心问题导致选中后恢复初始值:
value直接绑定了map['completedVersion'].toInt(),但选中新值后仅更新了versionInput的文本,未修改map['completedVersion']或用状态变量维护当前选中值。组件重建时,value会被重置为初始值,导致选中状态失效。- 下拉列表项基于
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
相关产品推荐
相关产品推荐

