Flutter报错:'Set<Text>'不是闭包上下文要求的Widget类型
报错原因
Dart 语法中,箭头函数 => 后紧跟大括号 {} 时,会优先将大括号内容解析为Set/Map 集合字面量,而非函数执行代码块。你内层 map 的写法 (i) => { return Text("hi"); } 实际返回的是 Set<Text> 类型,完全不符合 Row.children 要求的 Widget 迭代器类型,因此抛出类型不匹配错误。
修复方法
根据你是否需要在内层 map 中写计算逻辑,选对应写法即可:
- 无复杂逻辑、直接返回组件时,去掉大括号和
return,箭头后直接接返回值:
var rowOnee = Column(children: [ ...stampRows.map((i) => Row( children: [ ...[0,1,2,3,4].map((i) => Text("hi")) ], )) ]);
- 需要先执行计算逻辑再返回组件时,去掉箭头
=>,直接用普通块级函数体写法,此时大括号会被识别为代码块,内部的计算逻辑和return都能正常生效:
var rowOnee = Column(children: [ ...stampRows.map((i) => Row( children: [ ...[0,1,2,3,4].map((i) { // 此处可写任意多行计算逻辑 final showText = "hi"; // 逻辑执行完返回对应Widget return Text(showText); }) ], )) ]);
注意点
Dart 中箭头函数是单行返回的简写,仅适合直接返回单值的场景:
(参数) => 表达式等价于(参数) { return 表达式; }- 箭头后如果写大括号,会被判定为返回Set/Map集合,而非执行块内代码,要写多行逻辑必须去掉箭头,直接定义块级函数体。
内容的提问来源于stack exchange,提问作者quinzo
相关产品推荐
相关产品推荐

