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

Flutter DropDownButton选中新值不更新,保存至DynamoDB后状态未同步问题

问题根因

你的实现存在两个核心问题:

  • 临时修改值存在全局变量里,每次改任意一行的下拉框都会覆盖全局值,调用setState刷新时所有行都读取同一个全局值,自然会出现整列取值都被修改的问题
  • 下拉框的value属性绑定的是aprts列表中对应元素的availabily属性,你选了新值之后只改了全局变量,没有更新本地列表里对应元素的属性,界面自然不会刷新,必须手动拉取最新数据才会更新展示
修复方案

1. 修复下拉框逻辑

修改下拉框的onChanged回调,选中新值时先更新当前行对应元素的本地属性,再调用setState刷新界面,这一步仅修改内存数据,不会触发云端更新:

DropdownButton<String>(
  value: element.availabily,
  onChanged: (String newValue) {
    setState((){
      // 仅修改本地对象属性,刷新界面展示
      element.availabily = newValue;
    });
    // 保留原有记录逻辑,供保存按钮提交用
    availValue = newValue;
    tempAvail = element;
  },
  items: <String>['AVAILABLE', 'SOLD', 'RESERVED']
      .map((String value) {
    return DropdownMenuItem<String>(
      value: value,
      child: Text(value),
    );
  }).toList(),
)

2. 修复TextField输入异常问题

你当前每次渲染都会新建TextEditingController,会导致输入时焦点丢失、输入回弹的问题,建议替换为TextFormField用initialValue绑定值:

DataCell(TextFormField(
  initialValue: element.price.toString(),
  onChanged: (text) {
    // 同样先更新本地属性刷新界面
    element.price = int.tryParse(text) ?? element.price;
    aptPrice = text;
    tempPrice = element;
  },
)),
DataCell(TextFormField(
  initialValue: element.area,
  onChanged: (text) {
    element.area = text;
    aptArea = text; 
    tempArea = element;
  },
)),

3. 保存逻辑保持不变

点击保存按钮时,你原有提交到DynamoDB的逻辑不需要修改,提交成功后也不需要额外刷新界面,本地列表的属性已经和提交值完全一致。


内容的提问来源于stack exchange,提问作者Asfand Salam Alavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:06:04