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

Dart开发报错:map生成List<DropdownMenuItem<String>>时类型不匹配

问题根因

你代码的问题出在map方法传入的闭包写法不符合Dart语法规范:
Dart中函数有两种合法写法:

  • 箭头函数语法:(参数) => 表达式,无需写return,直接返回表达式的值
  • 普通函数语法:(参数) { 函数逻辑 },需要返回值时要主动加return语句

你现在把两种写法混用了:在箭头=>后面加了大括号{},Dart会把大括号包裹的内容识别为Set集合字面量,所以你的闭包返回的是Set<DropdownMenuItem<String>>类型,自然不符合map要求的返回单个DropdownMenuItem<String>的规则,就抛出了你看到的类型不匹配错误。


修复方案

两种可选写法都可以正常运行,选你习惯的即可:

方案1:保留箭头函数,去掉多余大括号

List<DropdownMenuItem<String>> categoriesAsDropdownList() {
  return <String>['One', 'Two', 'Free', 'Four']
      .map<DropdownMenuItem<String>>((String cat) => 
          DropdownMenuItem<String>(
            value: cat,
            child: Text(cat),
          )
      )
      .toList();
}

方案2:使用普通函数语法,添加return语句

List<DropdownMenuItem<String>> categoriesAsDropdownList() {
  return <String>['One', 'Two', 'Free', 'Four']
      .map<DropdownMenuItem<String>>((String cat) {
          return DropdownMenuItem<String>(
            value: cat,
            child: Text(cat),
          );
      })
      .toList();
}

内容的提问来源于stack exchange,提问作者Pascal Ehrlich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:15:03