使用Navigator.of(context).push()跳转页面时出现多类Dart语法错误,求解决
嘿,这问题我熟!你写的MaterialPageRoute的builder函数语法完全写错了,才导致了这一堆报错,咱们一步步来修正:
错误原因拆解
咱们先看看你触发的几个错误都是因为同一个语法问题:
- 函数表达式不能包含名称:你把
context直接写在builder:后面的大括号前,这相当于试图给匿名函数命名,Flutter里builder需要的是一个接收BuildContext参数的匿名函数,参数必须放在括号里,比如(context)。 - 不是常量表达式/非可选参数不能有默认值:这俩都是前面语法错误引发的连锁报错,编译器完全误解了你的代码逻辑,以为你在给参数设置默认值,修正语法后这些错误会自动消失。
- 参数类型不匹配:因为
builder的写法错误,导致整个MaterialPageRoute的类型不符合Navigator.push的要求,最终报了类型不兼容的错误。
修正后的代码
把builder的写法改成标准的匿名函数形式就行,有两种写法都可以:
写法1:箭头函数(简洁版)
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Are You Present?', debugShowCheckedModeBanner: false, home: Scaffold( body: Center( child: FlatButton( onPressed: () { Navigator.of(context).push( MaterialPageRoute( builder: (context) => HomePage() // 这里改成箭头函数,参数放在括号里 ) ); }, child: Text("Press to Continue") ), ), ) ); } }
写法2:带大括号的匿名函数(适合多逻辑场景)
如果之后需要在builder里加更多逻辑,可以用这种写法:
Navigator.of(context).push( MaterialPageRoute( builder: (context) { // 参数放在括号里,函数体用大括号包裹 // 这里可以加额外逻辑,比如打印日志 print("跳转到HomePage"); return HomePage(); } ) );
小提醒
记住,Flutter里所有需要接收BuildContext的builder函数,参数都必须用括号括起来,比如(context),不能直接把参数名写在大括号前面哦!
内容的提问来源于stack exchange,提问作者Aagam Shah
相关产品推荐
相关产品推荐

