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

Flutter下拉菜单重复值断言错误问题排查与解决

Flutter DropdownButtonFormField 重复值断言错误排查与修复

我在实现Flutter下拉选择框时遇到了断言错误,提示存在重复值,但明明数据源没有重复,尝试去重方法也无效,最终通过修改选项列表生成方式解决了问题,详情如下:

原始代码

var experienceYears = [];    

List<DropdownMenuItem<String>> getExperienceYears() {
        List<DropdownMenuItem<String>> items = [];
        for (var experienceYear in experienceYears) {
          items.add(DropdownMenuItem(
            value: experienceYear,
            child: Text(experienceYear.toString()),
          ));
        }
        return items;
      }
DropdownButtonFormField(
   isExpanded: true,
   value: experienceTime,
   items: getExperienceYears(),
    onChanged: (selectedExperienceTime) {
      setState(() {
        experienceTime = selectedExperienceTime.toString();
      });
    },
    decoration: const InputDecoration(
     border: OutlineInputBorder(),
    ),
    validator: (value) => (value as String?)?.isEmpty ?? true
      ? 'Tempo de experiência inválido'
      : null),

错误信息

DropdownButton的value对应的选项必须恰好有一个。检测到0个或2个及以上DropdownMenuItem具有相同值
断言失败:'package:flutter/src/material/dropdown.dart' 第1606行第15位
断言条件:items == null || items.isEmpty || value == null || items.where((item) => item.value == value).length == 1

调试结果

调试打印显示数据源和生成的选项列表均无重复,符合预期:

[DropdownMenuItem<String>, DropdownMenuItem<String>, DropdownMenuItem<String>, DropdownMenuItem<String>]
[Menos de 1 ano, Entre 1 e 3 anos, Entre 3 e 5 anos, Mais de 5 anos]

排查过程

已确认experienceYears无重复值,experienceTime与数据源变量可区分,尝试在map后使用toSet()或distinct()去重,均未解决问题。

修复方案

将单独的getExperienceYears()方法替换为直接在items参数中通过map生成列表,问题解决:

items: experienceYears
                  .map((experienceYear) => DropdownMenuItem(
                        value: experienceYear,
                        child: Text(experienceYear.toString()),
                      ))
                  .toList(),

内容来源于Stack Exchange,提问作者Caio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:35:18