Flutter导航报错:返回类型'Set<GameScreen>'不是'Widget'的原因及解决方法
报错原因分析
这个问题其实是箭头函数的语法误用导致的,我之前也踩过类似的坑:
在MaterialPageRoute的builder参数里,你写了builder: (context)=>{ return const GameScreen(); }——这里的=>{ ... }并不是你以为的“带大括号的箭头函数”,而是被解析成了Set集合字面量,相当于你返回了一个Set<GameScreen>类型的值,但builder回调要求必须返回Widget类型,这就直接造成了类型不匹配的报错。
修复方案
有两种简单的修复方式,选其中一种就行:
方式1:去掉多余的大括号(推荐)
箭头函数如果直接返回单个表达式,不需要加大括号,直接写返回的内容即可:
onPressed: (){ Navigator.of(context).push( MaterialPageRoute( builder: (context) => const GameScreen() ) ); }
方式2:保留大括号但修正函数写法
如果你后续需要在builder里加更多逻辑,想保留大括号,就得把箭头后的大括号去掉,改成普通的函数体写法:
onPressed: (){ Navigator.of(context).push( MaterialPageRoute( builder: (context) { return const GameScreen(); } ) ); }
修改后,builder就能正确返回GameScreen这个Widget,导航跳转就能正常工作了。
内容的提问来源于stack exchange,提问作者erbaz kamran
相关产品推荐
相关产品推荐

