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
相关产品推荐
相关产品推荐

