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

Flutter中如何为DropdownButtonFormField设置默认值(编辑场景)

问题原因

你的代码核心问题是**DropdownButtonFormField的value属性和DropdownMenuItem的value不匹配**:

  • 你给DropdownButtonFormField的value传的是workersList[0]['worker_name'](工人名称)
  • 但每个DropdownMenuItem的value对应的是value['worker_id'].toString()(工人ID字符串)

Dropdown的默认值必须是某个MenuItem的value值,类型和内容都要完全一致,否则无法识别选中状态,自然设置不了默认值。

解决方案

1. 编辑场景下的正确默认值设置

如果是编辑已有记录,你需要从当前要编辑的记录中获取对应的worker_id(转为字符串)作为默认值:

// 假设你有编辑的目标记录,比如editRecord,其中包含该记录关联的workerId
String? selectedWorkerId = editRecord['worker_id'].toString();

DropdownButtonFormField<String>(
  // 这里用对应的worker_id字符串,和MenuItem的value完全匹配
  value: selectedWorkerId,
  decoration: const InputDecoration(
    border: OutlineInputBorder(),
    labelText: "Payment To",
    prefixIcon: Icon(
      Icons.phone_android,
      color: Colors.blue,
    ),
  ),
  validator: (value) {
    if (value == null) {
      return "Please Select Worker";
    }
    return null;
  },
  hint: const Text('Select Worker'),
  items: workersList.map((Map value) {
    return DropdownMenuItem<String>(
      value: value['worker_id'].toString(),
      child: Text(value['worker_name']),
    );
  }).toList(),
  onChanged: (value) {
    _workerController.text = value.toString();
    // 同步更新选中的workerId,保持状态一致
    selectedWorkerId = value;
  },
),

2. 如果只是默认选中列表第一个选项

如果不是编辑场景,只是想默认选中列表第一个工人,value要传第一个工人的worker_id字符串,而非名称:

value: workersList.isNotEmpty ? workersList[0]['worker_id'].toString() : null,

额外注意事项

  • 先判断workersList是否为空,再访问索引,避免空指针异常
  • selectedWorkerId设为可空类型(String?),当列表为空或默认值不存在时,会自动显示hint文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:01:00