Flutter dropdown调用API获取数据出现重复值该如何解决
Flutter Dropdown组件Pincode重复值问题修复方案
一、API调用阶段避免重复(优先选择)
- 如果你可修改提供Pincode数据的后端接口,直接在接口返回逻辑中对Pincode字段做去重处理,从数据源层面消除重复值,不需要前端做额外适配,是成本最低的解决方案。
- 如果使用的是第三方不可改造的接口,再通过前端侧做数据去重兜底。
二、前端侧数据去重处理
拿到接口返回的原始数据后,先做去重再赋值给Dropdown的数据源即可,分两种常见场景:
场景1:接口返回的是Pincode字符串列表
直接通过Set去重:
// 调用接口获取原始数据 List<String> rawPincodeList = await fetchPincodeApi(); // 去重得到无重复的列表 List<String> uniquePincodeList = rawPincodeList.toSet().toList();
场景2:接口返回的是包含Pincode字段的对象列表
按Pincode字段做去重,保留第一个出现的重复项:
// 示例对象结构,可替换为你自己的业务对象 class PincodeInfo { final String pincode; final String area; PincodeInfo({required this.pincode, required this.area}); } // 调用接口获取原始数据 List<PincodeInfo> rawList = await fetchPincodeInfoApi(); Set<String> existedPincode = {}; // 按pincode字段去重 List<PincodeInfo> uniqueList = rawList.where((item) { if (existedPincode.contains(item.pincode)) return false; existedPincode.add(item.pincode); return true; }).toList();
注意事项
- 去重逻辑必须在给Dropdown的
items属性赋值前执行,保证传入Dropdown的数据源无重复值。 - Dropdown绑定的
value值必须存在于去重后的列表中,否则会触发There should be exactly one item with [DropdownButton]'s value异常。

内容的提问来源于stack exchange,提问作者Sanjoy Pator
相关产品推荐
相关产品推荐

