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

Flutter数组对象渲染DropdownMenuItem遇类型不匹配报错求助

Flutter DropdownMenuItem 渲染数组对象报错解决方法

你的代码主要有三个问题导致类型错误,逐一修正就能解决:

问题1:map返回的Iterable未转成List

listLorem.map()返回的是Iterable类型,直接放到items数组里会导致类型不兼容,需要转成List,这里可以用**展开运算符...**或者.toList()方法。

问题2:Map结构不能用点语法访问属性

你定义的listLorem是List<Map>,不是自定义类的对象,所以不能用items.someText这种点语法,必须用键索引items['someText']来取值。

问题3:DropdownMenuItem的value类型不统一

第一个下拉项的value是空字符串"",后面的是int类型的ids,两者类型冲突,必须统一类型:

  • 要么把第一个项的value改成null/0(对应int类型)
  • 要么把后面的ids转成String类型item['ids'].toString()(对应字符串类型)

修正后的完整代码(Map结构版本)

// 建议显式定义类型,避免动态类型隐患
List<Map<String, dynamic>> listLorem = [
    {
        "ids": 12,
        "someText": "Lorem Ipsum #12",
    },
    {
        "ids": 11,
        "someText": "Lorem Ipsum #11",
    },
];

// DropdownButton的items部分
items: [
    DropdownMenuItem(                                                          
        child: Text("Choose One"),
        value: null, // 统一为int类型的null,或者改成"",后面对应转String
    ),
    // 用展开运算符把Iterable转成数组元素,同时修正属性访问
    ...listLorem.map((item) => DropdownMenuItem(
        child: Text(item['someText']),
        value: item['ids'],
    )).toList(),
],

更规范的自定义类版本(推荐)

如果觉得Map访问麻烦,可以定义实体类来管理数据,代码更清晰:

// 定义实体类
class LoremItem {
  final int id;
  final String text;

  LoremItem({required this.id, required this.text});
}

// 初始化列表
List<LoremItem> listLorem = [
  LoremItem(id: 12, text: "Lorem Ipsum #12"),
  LoremItem(id: 11, text: "Lorem Ipsum #11"),
];

// DropdownButton的items部分
items: [
  DropdownMenuItem(                                                          
      child: Text("Choose One"),
      value: null,
  ),
  ...listLorem.map((item) => DropdownMenuItem(
      child: Text(item.text),
      value: item.id,
  )).toList(),
],

内容的提问来源于stack exchange,提问作者Haksatrya Bhaswara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:36