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

Flutter动态表单下拉框数据异常问题求助

问题原因分析

从你描述的现象来看,核心问题是下拉框选中值的状态没有与动态表单组的索引一一对应,而是采用了追加式的存储逻辑,具体可能的原因如下:

  • 选中值列表的更新逻辑错误:你的DropModel.selected列表应该是与表单组数量一一对应的数组,但在DropdownButtonFormField2的onChanged回调中,可能没有通过当前表单组的索引去替换对应位置的值,而是直接调用selected.add(newValue)。比如修改第二个下拉框时,没有执行selected[1] = "Reception",而是直接追加,导致列表长度超出表单组数量。

  • 表单组与状态的绑定缺失:在通过_addTile新增表单组时,没有在selected列表中初始化对应位置的默认值(比如空字符串或null),导致列表长度始终滞后于表单组数量,后续修改或新增时只能追加值,无法正确对应索引。

  • 共享状态引用问题:如果多个DropdownButtonFormField2组件共用了同一个状态实例的引用,而非每个表单组拥有独立的状态项,就会出现修改一个下拉框时,其他下拉框的状态也被错误追加的情况。比如所有下拉框都绑定到同一个selected变量,而非selected[index]。

举个典型的错误逻辑示例:

// 错误:直接追加值,不考虑当前表单组索引
onChanged: (value) {
  dropModel.selected.add(value);
},

正确的逻辑应该是根据当前表单组的索引更新对应位置:

// 正确:通过索引替换对应位置的选中值
onChanged: (value) {
  setState(() {
    dropModel.selected[index] = value;
  });
},

同时在新增表单组时,要为selected列表同步添加默认值:

void _addTile() {
  setState(() {
    groupControllers.add(GroupController());
    dropModel.selected.add(null); // 初始化对应位置的默认状态
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:25:20